2016-02-10 6 views
2

Я закодировал простой скрипт Perl для отправки почты с использованием модулей MIME :: Lite и Net :: SMTP. Но это привело к ошибке, «SMTP Не удалось подключиться к почтовому серверу: немедленная немедленная операция сокета не может быть завершена».Perl: SMTP не удалось подключиться к почтовому серверу

Perl скрипт Я попытался,

use strict; 
use warnings; 
use MIME::Lite; 
use Net::SMTP; 

my $from = '[email protected]'; 
my $to = '[email protected]'; 
my $host = 'smtp.gmail.com'; 

my $subject = 'A test message by script '; 
my $body = "Please ignore this message as this is test from Perl scripts "; 

my $msg = MIME::Lite->new (
    From => $from, 
    To => $to, 
    Subject => $subject, 
    Type =>'multipart/mixed' 
) or die "Error creating multipart container: $!\n"; 

$msg->attach (
    Type => 'TEXT', 
    Data => $body 
) or die "Error adding the text message part: $!\n"; 

MIME::Lite->send('smtp', $host, Timeout=>60); 
$msg->send; 

Фактическая ошибка я получил,

G:\>perl SampleEmail.pl 
SMTP Failed to connect to mail server: A non-blocking socket operation could not 
be completed immediately. 
at SampleEmail.pl line 26. 

Пожалуйста, помогите мне, что конкретно мне нужно проверить, чтобы отправить почту правильно.

Заранее спасибо

+0

Не могли бы вы указать точную версию perl, которую используете? Я нашел ссылки на такие проблемы в отношении конкретного компилятора, используемого для компиляции perl https://social.msdn.microsoft.com/Forums/vstudio/en-US/bceb27d0-621b-41ee-b536-df8c38f71598/vs-2010-winsock- Проблема? forum = wsk – AnFi

ответ

1

Извините за ответ на мой собственный вопрос, но это может помочь кому-то.

После месяца поиска, наконец, я обнаружил, почему мой сокет не подключается к SMTP с правильным хостом и кодом доступа. В моем случае модуль IO :: Socket обрушивается. У меня есть заменен IO :: Socket со свежим, и все это сработало. Думаю, причиной срыва модуля может быть то, что я вручную загружаю необходимые модули с другого сайта и размещаю его в Perl lib, а не в Perl Package Manager.

Thanks

-1

Если вы используете это на хорошо настроенный сервер Linux, вы, возможно, повезет больше, если вы берете

use Net::SMTP 

и

MIME::Lite->send('smtp', $host, Timeout=>60); 

и просто пусть MIME::Lite использует свои значения по умолчанию - обычно он позволяет sendmail обрабатывать сообщение. .

+0

Привет @Mscha, я проверил, как вы заявляли, используя sendmail, но я все еще кружу вокруг той же ошибки. –

2

MIME :: Lite/Net :: SMTP v3 * - отправка через smtp.gmail.com

Q1: Можете ли вы teknet SMTP (25) порт в smtp.gmail.com? Получаете ли вы приветственное сообщение SMTP?

telnet smtp.gmail.com 25 

A1: NO => Вполне вероятно, что ваши исходящие соединения с SMTP порта заблокированы, чтобы избежать исходящих спама.

Q2: Можете ли вы использовать telnet msa (587) порт в smtp.gmail.com? Получаете ли вы приветственное сообщение SMTP?

telnet smtp.gmail.com 587 

A1: ДА => отправить через MSA (587) или SMTPS (465). MIME::Lite может подключаться к порту smtps (465) с использованием Net::SMTP версии 3. *.
[ВНИМАНИЕ: см MIME::Lite 3.030 - NET::SMTP with smtps (port 465)]

# use smtps (465) port - it requires Net::SMTP version 3.* 
# use debugging (Debug=>1) for initial tests 
MIME::Lite->send('smtp', $host, SSL=>1, Timeout=>60, 
    AuthUser=>$user,AuthPass=>$pass 
    Debug=>1); 
+0

Привет @Andrzej, Спасибо за ответ, я использую Net Smtp версии 3.05 и MIME lite версии 3.01. Я протестировал с портом 465, как вы заявили. Я снова получаю ту же ошибку. Я тоже могу выполнить ping. Тогда почему он говорит, что не удалось подключиться к почтовому серверу. Нужно ли мне проверять что-нибудь еще. –

+1

[Q2] Получаете ли вы сообщение SMTP-приветствия, когда вы используете telnet-порт 587 на smtp.gmail.com? (Является ли это ошибкой perl?) – AnFi

+0

Я проверил с командой - 'open smtp.gmail.com 587', я получил ответ как -' 220 smtp.gmail.com ESMTP 188sm1896254qhi.1 - gsmtp' .. Я также пробовал с host - 'open secure.emailsrvr.com 587', где я получил ответ как« 220 smtp15.relay.iad3a.emailsrvr.com ESMTP-VA Code Section 18.2-152.3: 1 forbid s использование этой системы для незапрашиваемой массовой электронной почты (Спам) 421 4.4.2 Тайм-аут превышен Связь с хостом потеряна. Нажмите любую клавишу, чтобы продолжить ... ' –

 Смежные вопросы

  • Нет связанных вопросов^_^