Отправка писем с помощью Perl через SSL - PullRequest
1 голос
/ 16 марта 2011

Я пытаюсь отправить письмо с Perl через SSL. Лучший пакет, который я встречал, основываясь на примерах, это Net :: SMTP :: SSL. Это кажется стандартом. К сожалению, конструктор всегда возвращает undef для меня:

my $smtp = Net::SMTP::SSL->new('smtp.server.com', Port => 25, Debug => 1);

Я проверил, перепроверил и еще раз проверил имя сервера и номер порта, используя приложение .NET, которое по сути делает то же самое. С приложением .NET все работает нормально, поэтому я не вижу причин, по которым у меня могут возникнуть проблемы с подключением к серверу smtp.

Было бы чрезвычайно полезно, если бы модуль предоставлял какую-то отладочную информацию, но $! выходит пустым. Есть ли какое-то объяснение, почему переменная $smtp может быть неопределенной? Или я могу найти какую-нибудь полезную информацию отладки из вызова конструктора?

Редактировать: Да, я знаю, что порт 25 - странный порт для использования с SSL. Я не знаю, почему был выбран этот порт, но этот порт используется. К сожалению, я ограничен во времени, и мне будет легче разобраться с другой технологией, чем пытаться отлаживать модуль cpan. Спасибо всем за помощь.

1 Ответ

3 голосов
/ 16 марта 2011

Net :: SMTP :: SSL использует Net :: SMTP для своей работы. При просмотре source для Net :: SMTP в его подпрограмме new, undef возвращается для ряда условий ошибки. Для начала вы можете либо выполнить этот вызов функции в отладчике, либо вручную распределить операторы печати по всему коду, чтобы увидеть, как далеко он продвигается до освобождения.

Также убедитесь, что у вас установлен IO :: Socket :: SSL - он используется для сетевых операций. Если вы установили свои модули с помощью клиента cpan, он должен быть у вас, но другие менеджеры пакетов, такие как rpm, иногда портят цепочку зависимостей.

Я бы также дважды и трижды проверил наличие правильного порта: Net :: SMTP :: SSL документация гласит:

Из-за природы метода new Net :: SMTP не переопределяется использование порта по умолчанию для службы SMTPS. Возможно, будущие версии будут такими же умными. Порт 465, как правило, то, что вы хотите, и не трудно указать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...