Настройка исходящей почты SMTP на Linux с использованием Perl - PullRequest
1 голос
/ 07 ноября 2010

У меня проблема с отправкой почты через Perl. Когда я ставлю следующую команду: my $ smtp = Net :: SMTP-> new ($ ServerName, Debug => 0); где $ ServerName = "localhost". $ smtp не установлен. Это ноль. Кто-нибудь может сказать мне причину, по которой он не установлен должным образом. Поскольку тот же сценарий работает на моем другом сервере Linux.

Помощь действительно ценится.

Спасибо ДД

Ответы [ 2 ]

2 голосов
/ 07 ноября 2010

Net::SMTP, по-видимому, имеет довольно слабую обработку ошибок.Лучшее, что вы можете сделать:

my $smtp = Net::SMTP->new($ServerName)
            or die "Unable to connect to SMTP server '$ServerName'";

Даже передача Debug => 1, похоже, ничего не делает, когда не может создать объект.

Не было нового выпуска libnet(в том числе Net :: SMTP) в течение трех лет.Существует версия для разработчиков от мая 2010 года, которая, похоже, имеет некоторые улучшения: это документы :

On failure undef will be returned and $@ will contain the reason for the failure.

(самые последниеправильный выпуск этого не делает.)

Если вы хотите попробовать установить выпуск для разработчика, вы можете улучшить свой код до:

my $smtp = Net::SMTP->new($ServerName)
            or die "Unable to connect to SMTP server '$ServerName': $@";

Возможные причины сбоя подключения:

  • $ ServerName не является допустимым именем хоста
  • Нет службы SMTP, работающей на $ ServerName
  • Серверу не нравится стандартное приветствие, localhost.localdomain.Передайте Hello => 'your.fully.qualified.host.name' в конструктор.

Вы можете попробовать подключиться к SMTP-серверу в командной строке на хосте, на котором вы пытаетесь запустить этот скрипт:

$ telnet smtp.example.com
EHLO localhost.localdomain
quit
0 голосов
/ 07 ноября 2010

Вы пытались включить отладку?

 $smtp = Net::SMTP->new(
 Host => 'mailhost',
 Hello => 'my.mail.domain',
 Timeout => 30,
 Debug => 1,
 );

Затем посмотрите, что говорит вывод отладки.

...