есть куча способов отправки почты от /usr/sbin/sendmail до use CGI;
но в небольших скриптах выполняющие фактически отправку использовать масивный use CGI; мне кажется не совсем разумным и я пользовался простым способом:
$mailprog="/usr/sbin/sendmail -t -f $my_mail";
open (MAIL, "|$mailprog");
print MAIL "To: $to_mail\n";
print MAIL "From: $my_mail\n";
print MAIL "Content-Type: text/html; charset=windows-1251\n";
print MAIL "Subject: test\n\n";
print MAIL "Здрасте!";
close(MAIL);
И тут не жданно не гадано укрнетовцы стали на такие письма вешать "550 spam message"
После показа своего кода отправки. от них поступил ответ:
> Вот тут вот и порилась собака.
> Возьмите любую из свободно распространяемых библиотек формирующую красивие правильные письма и проблема исчезнет.
Как порекомендуете поступить? или где то код дополнить или какую библиотеку посоветуете?
суть в том что отправляется много писем и надо нагрузку свести к минимуму

Доброго
Доброго времени суток! Помимо того, что Вас будут воспринимать как спамера, решение получается крайне неперосимым. Я как-то видел в Cookbook описание подобной проблемы, они так даже приводили название модуля, инкапсулирующего работу с SMTP и красиво формирующего заголовки. Кажется, Mail::Sendmail
Варианты есть, но какой лучше...
первый
use Mail::Sendmail;
%mail = ( To => 'Комy@надо.послать',
From => 'От@кого.письмо',
Message => "Это собственно тело письма!!",
SMTP => 'smtp.mail.ru'
);
sendmail(%mail) or die $Mail::Sendmail::error;
второй
use MIME::Lite;
$msg = MIME::Lite->new (
From =>'John Doe ',
To =>'Frank Smith ',
Subject =>'Test.',
Data =>"It's just test!!!"
);
$msg->send;
третий
use IO::Socket;
my $socket = IO::Socket::INET->new ("127.0.0.1:25");
defined $socket or die "ERROR: $!";
$socket->print ("HELO1512");
$r = <$socket>;
$socket->print ("MAIL FROM:John Doe 1512");
$r = <$socket>;
$socket->print ("RCPT TO:Frank Smith 1512");
$r = <$socket>;
$socket->print ("DATA1512");
$r = <$socket>;
$socket->print ("From:John Doe \nTo:Frank Smith
\nSubject:Test. \n\nIt's just test!!!1512");
$r = <$socket>;
$socket->print ("\.1512");
$r = <$socket>;
$socket->print ("QUIT1512");
$r = <$socket>;
Вариант номер
Вариант номер три слабо отличается от оригинального спам-бота:)
У вас проблема в mime type
По моему у вас проблема в mime type, который просто нужно правильно оформлять в шапке и ограничить в теле.
Как только вы его корректно опишете, все замечательно поедет.
Это несложно сделать где-то одной страничкой кода, если не считать что по-правильному у письма с html обязательно в теле еще есть урезанная версия того-же что и в html, но plain text (text-alternative, кажется).
Но реально если писем действительно много, вам в любом случае прийдется уйти от форкания нового процесса на каждое письмо к коллектору, который будет за время своей жизни отсылать много писем.
писем много
писем действительно много.
уйти то можно, знать бы куда?
только что нашел причину из за которго меня спмером считают :)
это строчка print MAIL "Content-Type: text/html; charset=windows-1251\n";
если ее убрать. то все работает нормально, но как быть с кодировкой???
open (MAIL, "|/usr/sbin/sendmail -t -f $my_mail");
print MAIL "From: $my_mail\n";
print MAIL "To: $to_mail\n";
print MAIL "Subject: test2\n\n";
print MAIL "Здрасте!";
close(MAIL);
Ключевые слова
Ключевые слова RFC MIME. За обучение гуглению беру почасовую оплату :)
Письма можно не отправлять сразу а складывать в БД, откуда их будет периодически выбирать коллектор и рассылать.
коллектор?
с RFC MIME разобрался, спасибо!
для страждующих - обратите внимание что если вы используете text/html, то письмо обязано содержать минимальный набор необходимих тегов ...
Вопрос по коллектору:
Сам по себе коллектор - устроейство для сбора, в данном случае определенное к-во писем, это понятно.
Далее опять предполагается далнейшее использование?
for (0 .. $collector) {
open (MAIL, "|/usr/sbin/sendmail -t -f $my_mail");
print MAIL "From: $my_mail\n";
print MAIL "To: $to_mail\n";
print MAIL "Subject: test2\n\n";
print MAIL "Здрасте!";
close(MAIL);
}
Все верно?
можно
можно так:
while(1)
{
@mails = readSQLArray();
foreach (@mails)
{
send_mail($_);
}
sleep 10;
}
или запускать по cron такое:
@mails = readSQLArray();
foreach (@mails)
{
send_mail($_);
}
- всегда стоит оформлять какие-то часто используемые нетривиальные куски кода функциями с "говорящим" названием.
теперь mail.ru
с укрнетом все впорядке, а mail.ru кричит о спаме и ответ от них “В сообщении нарушен почтовый стандарт RFC-822.”
Но в спацификации RFC-822 сказано что: Минимально необходимыми являются поля Date, From, To. + если используется text/html то письмо должно оформляться html тегами Минимально необходимыми являются поля Date, From, To. + если используется text/html то письмо должно оформляться html тегами
Все это учтено и даже более.
Не все учтено.
Не все учтено.
Если вы пишете в mime, там уже недостаточно соответствия rfc-822.
Посмотрите, как отправляет письма например thunderbird.
люди, вопрос
люди, вопрос такой...
где мне найти _бесплатный_ сервер для отправки почты под Виндовс?
у меня есть скрипт, выстраданый мной для отправки почты через smtp.mail.ru, но на 9м письме меня забанили мол я спаммер - очень расстраивает(. если интересно, могу поделиться таким скриптом (хотя в нем мало чего особенного).
А у тебя что,
А у тебя что, хостинг на Win32?
Вопрос вдогонку - что, есть какие-то отличия по отправке почты под Unix системами и Win32:))?
А в чем вообще
А в чем вообще состоит задача? (только, пожалуйста, про почту, частоту, размеры писем, что в письмах (html или аттачменты), адрес отправителя, адреса получателей, а с win32 потом разберемся :) )
:) я не
:) я не веб-программист. нету у меня _пока_ хостинга) я наоборот системный программист, просто маленький еще, и мне все интересно)).
отличия Юникс от Виндовс - насколько я понимаю, их нету, разве что нужен smtp-сервер. Под юниксом бесплатные сервера есть. А под виндовсом - стоял один такой - максимум 10 писем в день, потом просил денюжку. Может, я плохо гуглил?
Задача(пока что мне ее не ставили как работу, но...как сейчас без этого?) состоит в том, чтобы мой скрипт при необходимости отправил письма N людям :) размер маленький, вложения - вряд ли. хтмл - вряд ли, хотя меня несколько расстроила наша дискуссия - по вашим словам мэйл-сервера как-то не любят хтмл (мимэ и т.д.)...
надеюсь, выразил мысль ясно)
Во первых, вам
Во первых, вам самому будет удобнее сделать отправку почты прямо из скрипта, потому что его можно очень гибко настраивать. Да и вобщем сложность не в самой отправке а в корректном оформлении письма (во всех этих шапках, в кодировках и в конверте).
Во вторых, насколько я знаю, многие мейлсверверы портированы на win32, так что нужно просто пройтись по официальным сайтам и поискать насчет портов для win32.
В третьих, mime (правильно читается майм) это и есть вложение.
И я уже тут говорил, что наиболее корректно при отправке письма с html-вложением, также отправлять в этом-же письме дополнительным вложением тот-же текст что и в html, но чистым текстом (plain text). Смысл в том что если читалка не умеет работать с html, она покажет plain text.