Массовая отправка электронных писем - PullRequest
2 голосов
/ 02 октября 2008

Мне необходимо периодически отправлять оповещения по электронной почте подписавшимся пользователям. PHP, похоже, борется с отправкой одного сообщения, поэтому я ищу хорошие альтернативы.

Подойдет любой язык, если реализация будет достаточно быстрой. Количество отправленных писем в конечном итоге составит тысячи.

Если можно избежать покупки лицензионного программного обеспечения, тем лучше.

Ответы [ 8 ]

2 голосов
/ 02 октября 2008

Очередь писем в php - короткая версия - Pear's Mail_Queue. Я использовал это для отправки 30-50 000 + писем в день или более (несколько дней в неделю) без проблем в течение более года.

1 голос
/ 02 октября 2008

Одна вещь, которую вы могли бы сделать, это изменить фокус вопроса на основное почтовое программное обеспечение. Например, если бы я хотел отправить тонну писем, я бы использовал любой язык для их записи в формате BSMTP, который в основном похож на простые команды клиента SMTP. Что-то вроде:

MAIL FROM:<me@example.com>
RCPT TO:<you@example.com>
DATA
From: Me <me@example.com>
To: You <you@example.com>
Subject: test email

This is the body of the test email I'm sending
.

Тогда я бы передавал файлы BSMTP через exim:

cat *.bsmtp | exim -bS

Это, по существу, устраняет задержку отправки электронных писем из вашей программы и накладывает бремя на exim (который, как MTA, лучше подготовлен для обработки).

Как только вы освоите основы, есть множество вещей, которые вы можете изменить, чтобы сделать их более эффективными. Например, если ваши электронные письма не настроены, вы можете предварительно оптимизировать их, поместив всех получателей в один и тот же домен в один и тот же файл BSMTP:

MAIL FROM:<me@example.com>
RCPT TO:<you@example.com>
RCPT TO:<him@example.com>
RCPT TO:<her@example.com>
RCPT TO:<them@example.com>
DATA
From: Me <me@example.com>
To: Me <me@example.com>
Subject: test email

This is the body of the test email I'm sending
.

Затем вы также получаете массу возможностей для оптимизации самой MTA для отправки почты (например, она будет автоматически обрабатывать параллельные доставки, доставки электронной почты на один и тот же почтовый сервер по тому же TCP-соединению и т. Д.) ).

Что касается выполнения этого в коде, то раньше у нас была библиотека Perl, которая помогла нам сделать это. По сути, вы отправили ему электронные письма и адреса, и при необходимости он прерывал звонки на почтовый сервер. Он настраивал количество параллельных сессий, которые он допускал, а также контролировал нагрузку на сервер и снижал скорость, если нагрузка превышала настраиваемый пользователем порог.

1 голос
/ 02 октября 2008

smtplib в python - это пустяк в настройке и очень чистый API.

1 голос
/ 02 октября 2008

Хотелось бы упомянуть, что в моей предыдущей работе мы создали решение для массовой рассылки писем на PHP, которое отлично работало, поэтому я не понимаю, почему вы исключили бы его полностью:)

1 голос
/ 02 октября 2008

Для Java есть http://java.sun.com/products/javamail/ Я использовал это в приложении. Довольно прост в настройке и использовании.

В Ruby это чрезвычайно просто, но я не использовал его, поэтому ничего не могу сказать о производительности. http://snippets.dzone.com/posts/show/2362

Тем не менее ... Я сомневаюсь, что сам PHP будет слишком медленным для отправки почты. Возможно, в вашем приложении есть узкое место?

1 голос
/ 02 октября 2008

У нас есть различные приложения, пишущие в очередь электронной почты в таблице базы данных, и служба Windows .Net опрашивает эту таблицу для составления электронных писем и отправки их через наш почтовый сервер.

Мы делаем до 1000 писем в минуту ...

0 голосов
/ 02 октября 2008

Я использую программу e-Campaign, которая читает файлы CSV. Если вам нужно сделать это программно, то вы можете захотеть встроить технику ожидания, чтобы не пытаться отправить 10000 писем за раз. С помощью e-Campaign вы можете выбрать, сколько писем отправлять за один раз, и установить перерыв между этими партиями. Это все еще очень быстро, но не вызывает проблем с перегрузкой сервера.

0 голосов
/ 02 октября 2008

Существует инструмент командной строки на основе dos, называемый blat, который вы можете легко загружать и отправлять по электронной почте

...