Самый быстрый способ отправки письма
А ещё можно написать скрипт на чём-нибудь, который генерит письма и ложит их в очередь, а из PHP-скрипта запустить его в бекграунде.
В случае с локальным МТА не получится отправить письмо повторно в случае временной ошибки
Неважно как скоро ты эти письма засунешь в очередь почтового демона, сам демон будет их дольше пытаться разослать.
Значит все же SMTP?
Внешний мейлер, наверное, будет лучшим решением, потому что значительная часть писем на валидные адреса отлупится грейлистингом, а мейлер уже сам дошлет со второй попытки, то есть не надо будет эту функциональность дописывать.
В случае с локальным МТА не получится отправить письмо повторно в случае временной ошибкиКак это? А зачем же он нужен тогда? Я полноценный почтовый сервер имел в виду если что.
Значит все же SMTP?Он имел в виду, что не важно с какой скоростью у тебя скрипт закончит работать, т.к. время доставки будет всё равно много больше.
В смысле скрипт не повторит отправку. Сам МТА конечно может повторить. Но если окажется, что на данный адрес отправка вообще не возможна, скрипт об этом не узнает.
Это уже не важно. Главное, чтобы я за обозримое время отправил все письма, а когда они дойду - это уже пофиг.
В смысле скрипт не повторит отправку.В том-то и дело, что это уже задача не скрипта, а MTA.
Сам МТА конечно может повторить. Но если окажется, что на данный адрес отправка вообще не возможна, скрипт об этом не узнает.Он и так об этом может не узнать. Лучше эту ситуацию обрабатывать как-нибудь по-другому. Ловить отбойники на определённый адрес и их уже анализировать чем-нибудь.
Типа получить входные данные (e-mail, заголовок открыть сетевое соединение, пульнуть туда данные. Какие данные посылать? - можно отсниферить траффик при отправке письма.
Или гугл взботни на тему SMTP connection from PHP
Первая ссылка выдала код:
<?php
$smtp_server = "smtpserver.com";
$port = 25;
$mydomain = "mydomain.com";
$username = "username";
$password = "password";
$sender = "sender email";
if (ISSet($_REQUEST["recipient"]
{
$recipient = $_REQUEST["recipient"];
}
else
{
Die("Recipient is a required field...");
}
if (ISSet($_REQUEST["subject"]
{
$subject = $_REQUEST["subject"];
}
else
{
$subject = "";
}
if (ISSet($_REQUEST["content"]
{
$content = $_REQUEST["content"];
}
else
{
Die("Content is a required field...");
}
// SMTP connection
$handle = fsockopen($smtp_server, $port);
fputs($handle, "EHLO " . $mydomain . "\r\n");
// SMTP authorization
fputs($handle, "AUTH LOGIN\r\n");
fputs($handle, base64_encode($username)."\r\n");
fputs($handle, base64_encode($password)."\r\n");
// Send out the e-mail
fputs($handle, "MAIL FROM:<" . $sender . ">\r\n");
fputs($handle, "RCPT TO:<" . $recipient . ">\r\n");
fputs($handle, "DATA\r\n");
fputs($handle, "To: " . $recipient . "\n");
fputs($handle, "Subject: " . $subject . "\n\n");
fputs($handle, $content . "\r\n");
fputs($handle, ".\r\n");
// Close connection to SMTP server
fputs($handle, "QUIT\r\n");
?>
Типа получить входные данные (e-mail, заголовок открыть сетевое соединение, пульнуть туда данные. Какие данные посылать? - можно отсниферить траффик при отправке письма.Не ходите, дети, в Африку гулять, блядь!
к спамерам подался?
Нет, это просто тестовое задание. Фирма геймдевом занимается.
Сам по себе MTA можно настроить, чтобы временные ошибки превращались в постоянные через короткое время. Скажем, через полчаса. Зажимать этот параметр слишком сильно нельзя из-за грейлистинга, как тут уже обозначили. Ну и почти любой MTA предоставляет средства для просмотрра очередей отправки, так что ты в любой момент времени сможешь получить статистику по отправке сообщений.
Окей, спасибо, буду смотреть, какие MTA можно использовать. PEAR:Mail умеет только с sendmail работать, посмотрю, что умеет он, а дальше exim4 и тд.
sendmailсейчас sendmail de-facto суть один из интерфейсов к MTA, i.e. практически любой почтовый сервер включает sendmail.
быстрее чем скорость канала не отправишь... можно написать прогу, которая передющему серваку жахнет 10мегабайтами за секунду, но он это не успеет разобрать
Mail Transfer Agent'a какие есть спецификации?
Оставить комментарий
Fragaria
В качестве тестового задания в одной фирме нужно придумать архитектуру сервиса, который разошлет пользователям одной онлайн-системы письма-уведомления с содержанием, отличающимся только обращением в начале (типа Уважаемый %username%! Бла бла бла). Обязательное условие - сервис должен за ограниченное время справиться с рассылкой на большое количество адресов (до миллиона при этом он должен быть написан на PHP (!)Все вроде понятно, за исключением собственно процедуры отправки. От mail я отказался сразу. Один из вариантов - PEAR:MAIL, который умеет отправлять через SMTP или sendmail.
Что быстрее?