Как отправить письмо через GMail из программы на Perl?
В комментариях к статье Как отправить письмо используя Perl ? Или модуль Perl MIME-Lite был задан вопрос — а как собственно применить статью если возникла необходимость отправлять письма не через локальный почтовый сервер с простейшей авторизацией или вообще без нее.
Как отправить письмо из программы написанной на Perl через почтовый ящик GMail?
А особенность отправки — это работа SMTP GMail по 465 порту через SSL.
Итак, приступим — решение есть и я его вам покажу.
Некоторые люди любят изобретать колесо, велосипед и прочее снова и снова, но при программировании на языке Perl сильно не стоит этим увлекаться — практически на любые стандартные необходимости написаны модули и их написано очень много.
Мы облегчим себе жизнь и используем уже придуманное колесо, т.е. модуль для работы с почтой через SSL — Net::SMTP::SSL
Обычно этот модуль на сервере не установлен, если у вас есть доступ (если нет, обратитесь к поддержке), то можно его установить, я приведу пример установки для FreeBSD
cd /usr/ports/mail/p5-Net-SMTP-SSL ; make install clean |
чтобы не было вот такого — 530-5.5.1 Authentication Required — сразу установим модуль p5-Authen-SASL
cd /usr/ports/security/p5-Authen-SASL ; make install clean |
Дальше разберем работающий пример отправки письма через GMail SMTP SSL
#!/usr/bin/perl # Подключаем модуль use Net::SMTP::SSL; # Задаем переменные $from = '[email protected]'; $pass = 'password'; $to = '[email protected]'; $subject = 'Привет!'; $body = 'Я пишу тебе с приветом, рассказать что солнце встало!<br /> Удачного дня!'; # Создаем соединение с удаленным сервером, включаем режим отладки (можно не включать) $smtp = Net::SMTP::SSL->new('smtp.gmail.com', Port => 465, Debug => 1); # Указываем свой логин (для почты GMail это ваш почтовый ящик) и пароль $smtp->;auth($from, $pass); # Создаем письмо, указываем свой ящик $smtp->;mail($from); # Указываем получателя $smtp->to($to); # Объявляем начало передачи данных $smtp->data(); # Отправка данных удаленному серверу $smtp->datasend("From: " . $from . "\n"); $smtp->datasend("To: " . $to . "\n"); $smtp->datasend("Subject: " . $subject . "\n"); # Формат письма задаем html, можем использовать теги # Скрипт написан в кодировке utf-8, указываем ее $smtp->datasend("Content-Type: text/html; charset=utf-8\n"); $smtp->datasend("Content-Transfer-Encoding: quoted-printable\n"); $smtp->datasend("\n"); # Передаем собственно сам текст письма $smtp->datasend($body . "\n"); # Конец отправки данных удаленному серверу $smtp->dataend(); # Закрываем сокет соединения с сервером $smtp->quit; |
Вот в принципе и все, скрипт успешно отправил мои тестовые письма, они успешно прочитались.
]:-> >:o ]:-> >:o