Как с помощью Perl отправлять e-mail с сервера?

Вопросы о том как и что сделать чтобы работало
Правила форума
1. Один вопрос - одна тема. Не надо задавать в той же теме другие вопросы.
2. Не пишите в чужих темах, если ваша проблема не имеет отношения к обсуждаемой.
3. Давайте полное описание проблемы - имя сайта, имя сервера, учётная запись, способ воспроизведения, скриншот ошибки.
4. Пароли выкладывать в форум - НЕ НАДО
Сергей

Как с помощью Perl отправлять e-mail с сервера?

Сообщение Сергей » 2018-03-13, 22:06:13

Вот у меня такой скриптик.
Закачал в mc-tonus.ru/cgi-bin/2011-7.pl. Пишет: Illegal seek.
Может где какой путь прописать?
Алекс Кеда пишет, что надо использовать именно mail, а senmail не работает.

Спасибо.

Код: Выделить всё

#!/usr/bin/perl -w
# --------------------------------------------------
# ОТПРАВЛЯЕМ E-MAIL С СЕРВЕРА С ПОМОЩЬЮ ВЫЗОВА MAIL
# --------------------------------------------------
use CGI::Carp qw(fatalsToBrowser); # модуль вывода в окне браузера всех сообщений об ошибках
use CGI qw( :standard); # модуль для обработки данных формы и вывода хеадеров

$from_address="admin<admin\@mc-tonus.ru>";
$to_address="Kazakov<kzkff\@rambler.ru>";
$subject="test";
$body="типа теста";

use Mail::Mailer;
$mailer = Mail::Mailer->new();
$mailer->open( { From    => $from_address,
                 To      => $to_address,
                 Subject => $subject
               })
  or die "Can't open; $!\n";
print $mailer $body;
$mailer->close();

print header(-charset=>'utf-8'),
start_html(-title=>'test page'),
h1('TEST PAGE of MC-TONUS'),
"Смотрим:<BR>$header<HR>$from_address<BR>$to_address<BR>$subject<BR>$body<HR>$!",
end_html();

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги нашей хостинговой компании

Хостинг HostFood.ru

Тарифы на хостинг, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM), от 189 рублей: https://www.host-food.ru/tariffs/virtualny-server-vps/
Тарифы на выделенные сервера (Dedicated Server), от 1560 рублей: https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах, от 110 рублей: https://www.host-food.ru/domains/
Часто задаваемые вопросы по хостингу: https://www.host-food.ru/faq/
Вопросы по доменам: https://www.host-food.ru/faq/domains.questions/

Ирина Седова

<t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t>

Сообщение Ирина Седова » 2018-03-13, 22:06:13

Полностью текст ошибки можете привести?

Сергей

<t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t>

Сообщение Сергей » 2018-03-13, 22:06:13

А как его вызвать, текст этот?
Я в скрипте вывел на экран значение переменной $!. Он то и говорит, что "Illegal seek"


Сергей

<t><t><t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t></t></t>

Сообщение Сергей » 2018-03-13, 22:06:13

Странно.
В какую хоть сторону копать?
Мэйл клиент точно из командной строки работает?
А путь к мейлу какой на сервере? И какие ограничения на количество отправки писем?



Сергей

<t><t><t><t><t><t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t></t></t></t></t></t>

Сообщение Сергей » 2018-03-13, 22:06:14

Вот работающий скриптик на Перле:
Только с кодировкой писем пока не разобрался и сервер мыла с паузами отправляет почему то.
Может куда вывесить потом, если кому нужно будет.

Код: Выделить всё

#!/usr/bin/perl -w
# --------------------------------------------------
# ОТПРАВЛЯЕМ E-MAIL С СЕРВЕРА С ПОМОЩЬЮ ВЫЗОВА MAIL
# --------------------------------------------------
use CGI::Carp qw(fatalsToBrowser); # модуль вывода в окне браузера всех сообщений об ошибках

use Net::SMTP;
$smtp = Net::SMTP->new('smtp.host-food.ru'); 
$smtp->mail('admin@mc-tonus.ru');
$smtp->to('kzkff@rambler.ru');
$smtp->data();
$smtp->datasend("From: <admin\@mc-tonus.ru>\n");
$smtp->datasend("To: <kzkff\@rambler.ru>\n");
$smtp->datasend("Reply-To: <admin\@mc-tonus.ru>\n");
$smtp->datasend("Content-Type: text/plain; charset=windows-1251\n");
$smtp->datasend("Content-Transfer-Encoding: 8bit\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message!\n");
$smtp->dataend();

Вячеслав Голоков

<t><t><t><t><t><t><t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t></t></t></t></t></t></t>

Сообщение Вячеслав Голоков » 2018-03-13, 22:06:14

Посмотрите кодировку скрипта (файла).
Паузы - из-за лимитов + также паузы приёма у серверов.

Сергей

<t><t><t><t><t><t><t><t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t></t></t></t></t></t></t></t>

Сообщение Сергей » 2018-03-13, 22:06:14

Но тут странная вещь какая то.
Отправилось два письма (точнее получено на Рамблере), а больше ни одного!
И на Гмаил.ком шлю тоже. Не доходят.
Странно. Иногда пишет, что СМПТ сервер не доступен, но через минуту всё как бы отправляется, но не приходит.

Да, что в настройках нужно писать smtp.host-food.ru или srv7.host-food.ru или вообще localhost?
Может авторизацию нужно пройти на smpt-сервере?

Вячеслав Голоков

<t><t><t><t><t><t><t><t><t><t><t>Как с помощью Perl отправлять e-mail с сервера?</t></t></t></t></t></t></t></t></t></

Сообщение Вячеслав Голоков » 2018-03-13, 22:06:14

лучше прописать доменное имя с spf, на домене вашем, т.е. указывать ваше доменное имя, а именно (допустим) mydomain.com, привязка домена третьего уровня в виде smtp.mydomain.com - не требуется. И лучше указывать имя отправителя, если робот, то использовать noreply@mydomain.com или robot@mydomain.com и если это рассылка, то в письме должна присутствовать информация о том, как отказаться от рассылки. В гмаил скорее всего попадает в спам из-за отсутствия данных условий. Или появится через какое-то время из-за временной задержки, которую также устанавливают для писем не подходящем под rfc.

Авторизоваться лучше через smtp сервер.