2009-11-22 3 views
4

Я пишу приложение электронной почты для массовых сообщений Java, чтобы отправлять электронные письма для отправки от 50 000 до 100 000 пользователей в день.javamail vs sendmail performance at bulk email

Текущий план заключается в деле делегировании отправки делегату sendmail (на локальном сервере unix).

От нашего тестирования sendmail отправляет максимум 5 электронных писем в секунду.

Может ли JavaMail быть более быстрым вариантом?

Кто-нибудь знает, что такое более быстрый способ отправки писем. Мы хотим, чтобы этот процесс был как можно быстрее.

Edit: Кстати, в формате PDF будет приложена слишком

+0

Вы используете Runtime.exec (..) в настоящее время? –

+0

Пока еще нет. –

+0

Возможно, вы не собираетесь ускорять процесс, просто изменив программу, которую вы используете, чтобы отправлять электронные письма. Чтобы увидеть существенную скорость, вам нужно будет что-то сделать, чтобы распараллелить процесс, чтобы вы могли делать это на нескольких компьютерах одновременно. – Nate

ответ

6

Вы не сравниваете подобное с подобным. JavaMail обсуждает SMTP для передачи на ближайший почтовый сервер. Sendmail - агент передачи почты, ответственный за маршрутизацию писем в пункт назначения.

Общая настройка - это Java-приложение с использованием JavaMail для ретрансляции электронной почты через SMTP на сервер Sendmail. Эти два не являются конкурентами, они используются вместе. Сервер sendmail должен иметь возможность принимать поставки из javamail быстрее, чем любое java-приложение может их создавать, но затем он обеспечивает их асинхронно по собственной ставке.

1

Прежде всего, я полагаю, что это по законным причинам, а не по рассылке?

Sendmail очень, очень быстро отправляет электронные письма. То, что не так быстро, - это поиск DNS, необходимый для поиска почтовых серверов для домена - вам нужно сделать MX-запрос для каждого - и это будет отлично с 5 сообщениями, которые вы сообщаете.

Когда это будет сказано, вам, вероятно, будет лучше всего использовать стандартное высокопроизводительное программное обеспечение для рассылки, в котором вы создадите сообщение с помощью javamail и сообщите программе рассылки для отправки всем. Также союзником, например, Google Mail, поскольку они хорошо масштабируются, чтобы фактически отправить их всех. Google Apps для Java позволяет отправлять сообщения из облака Google.

Еще в древней истории, когда я работал с этим Majordomo, отлично работал с sendmail. ezmlm хорошо работает с qmail (но, вероятно, сейчас он оставлен), и я думаю, что mjmlm хорошо работает с postfix.

+0

Да, это по уважительным причинам. Учреждение отправляет письма сотрудникам с помощью специального вложения pdf. Сведения о вложении и получателе поступают из базы данных Oracle, поэтому интеграция с Google Apps невозможна. (стыдно, поскольку у нас есть партнерство с Google). –

4

Это может быть немного слишком старым, но мне просто удалось заставить javamail и sendmail работать вместе. На самом деле это очень просто, и я был глуп, потому что не делал это быстрее ...

Давайте немного проигнорируем sendmail. Как мы можем отправить электронное письмо через javamail? Есть тонны учебников онлайн, но вот как это делается:

  1. Создайте сеанс с соответствующим аутентификатором;
  2. Создайте объект MimeMessage (здесь вы добавляете все адреса получателей);
  3. Позвоните Transport.send() с вашим сообщением.

Что делать, если ваш SMTP-сервер отправляет электронные письма до 100 получателей (например, моих)? Вот когда sendmail вступает в игру. Вы можете думать о sendmail как о своем собственном SMTP-сервере. Поэтому сначала установите его.Если вы используете Ubuntu (например, я), просто выполните:

sudo apt-get install sendmail 

Установка завершается довольно быстро. После этого sendmail готов к использованию. Я не беспокоился о настройке любого типа аутентификации или вообще, но, вероятно, это хорошая идея, если на вашем сервере будет публичный IP-адрес в Интернете. Теперь вместо того, чтобы указывать ваш Java-код (который использует javamail) на ваш SMTP-сервер, просто укажите его на localhost (или на какой-либо другой компьютер, который вы только что установили sendmail).

Вы даже можете протестировать свою установку sendmail с помощью обычного почтового клиента (Thunderbird, Outlook, Windows Mail или любого другого, плавающего на вашей лодке). Просто настройте свой SMTP-сервер на компьютер, на котором установлен sendmail. Угадай, что? Оно работает!

Просто не использовать для отправки сообщений электронной почты на весь мир ...;)

1

Если мы используем Tranport.send() - статический метод, в Java почтовой программы для отправки почты, этот метод делает то квитирование, для каждого адреса электронной почты, присутствующего в списке. (Квитирование: запрос от клиента -> Ответ с сервера -> Подтверждение.), То есть каждый раз, когда он закрывает соединение с почтовым сервером SMTP. Вот способ увеличить производительность .., с помощью которой мы можем делать квитирование только один раз, и это значительно снижает трафик SMTP. И отправьте почту всем получателям за один снимок, Pl ссылается на SCR # A для SMTP-трафика для этого сценария. Вот код для справки,

Вместо,

Transport.send(msg); 

Мы должны использовать ниже фрагмент кода,

      msg.saveChanges(); // implicit with Transport.send() 
          Transport tr = session.getTransport("smtp"); 
          tr.connect(smtphost, username, password); 
          msg.saveChanges(); // don't forget this 
          tr.sendMessage(msg, msg.getAllRecipients()); 
          tr.close(); 

Для отправки объемных писем.

Здесь вы можете увидеть сетевой трафик с помощью проволочного инструмента акульих ..

Что нужно, чтобы настроить это с почтовым сервером. -> Локальный m/c, установленный с помощью инструмента Shark Shark и Apache tomcat 6.0, и он должен иметь возможность проверять ваш почтовый сервер. Relay.abcxyz.com

Теперь запустите испытательный стенд для обоих корпусов.