php-скрипт для массовой рассылки писем.

so_mailer (Simple-order mailer) предназначен для массовой рассылки писем и тех случаев, когда в одном скрипте по циклу функцией mail() это делать нельзя по причине ограничений либо на время выполнения скрипта (Fatal error: Maximum execution time of N second exceeded), либо на количество отправленных сообщений в период времени, накладываемого хостингом.
Continue reading


Настройка отправки почты через sendmail из php в Debian(Ubuntu)

1. Устанавливаем sendmail

apt-get install sendmail-base sendmail-bin

2. Настраиваем php

Правим в /etc/php5/apache2/php.ini

sendmail_path  = /usr/sbin/sendmail -t -i -f mail@mail.r

где mail@mail.ru любой реально существующий email, который в отправляемых письмах будет указан, если from не указано.

3. Перезапускаем apache

/etc/init.d/apache2 restart

Перенос(и импорт) почты домена на яндекс-почту для домена.

Достаточно давно Яндекс предоставляет такой сервис как «почта для домена». Если у вас есть сайт mysite.ru, хочется иметь почтовые ящики вида username@mysite.ru и не хочется заниматься настройкой почтового сервера — этот сервис для вас. Тем более, что используя его вы получаете возможность привычным web-интерфейсом почты и защиту от спама на уровне, недоступном для самонастроенных почтовых серверов.

Чтобы выполнять все нижеперечисленные операции, надо зарегистрироваться на яндевсе и войти под своим логином.
Continue reading


Exim4. SMTP-авторизация. Механизм запрета отправки писем на внешние SMTP без авторизации.

Чтобы почтовый сервер не стал проходным двором для спамеров, то как правило запрещают отправлять письма на сторонние серверы через него. Но не для всех, а для тех, кто не прошел авторизацию. Для неавторизованных передаётся сообзение relay not permitted. Рассмотрим механизм авторизации и сообщения, которыми в ходе отправки письма обмениваются почтовый клиент и SMTP-сервер.

Механизм отправки через SMTP с авторизацией

Для SMTP-авторизации получим особым образом сформированное base64-преобразование из имени пользователя и пароля

printf "<username>\0<username>\0<пароль>"|base64

Получается вот такая прелесть

YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=

Само собой эта base64 испорчена мной для упбликации, чтобы исключить возможность раскодировки

Берём telnet и полностью имитируем работу почтового клиента по отправке письма (C-клиент, S-сервер, #-мои комментарии)

С: $ telnet *.*.ru 25                                                         # Подключаемся к SMTP по 25-му порту
С: Trying *.*.*.*...
С: Connected to *.*.ru.
С: Escape character is '^]'.
S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400                       # Есть подключение, слушаю вас
С: EHLO ADMIN                                                                                   # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть
S: 250-*.ru Hello ADMIN [*.*.*.*]
S: 250-SIZE 52428800                                                                            # Есть ограничение по размеру
S: 250-PIPELINING
S: 250-AUTH PLAIN                                                                               # Есть авторизация по методу PLAIN
S: 250-STARTTLS 
S: 250 HELP
С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=  # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64
S: 235 Authentication succeeded                                                                 # Реквизиты верные. Ты авторизован
С: MAIL FROM:<adm@*.*.ru>                                                        # Прими емэйл отправителя
S: 250 OK                                                                                       # Есть!
С: RCPT TO:<sys-adm@bk.ru>                                                                      # Прими емэйл получателя
S: 250 Accepted                                                                                 # Принял
С: DATA                                                                                         # Начинаю писать письмо
S: 354 Enter message, ending with "." on a line by itself                                       # Пиши. Не забудь точку в последней строчке
С: test
С: .
S: 250 OK id=1OMJoP-0001YJ-Gz                                                                   # Ok. Будет доставлено, если чего id письма 1OMJoP-0001YJ-Gz

Механизм отправки через SMTP без авторизации

С: $ telnet *.*.ru 25                                                         # Подключаемся к SMTP по 25-му порту
С: Trying *.*.*.*...
С: Connected to *.*.ru.
С: Escape character is '^]'.
S: 220 *.ru ESMTP Exim 4.69 Wed, 09 Jun 2010 15:47:08 +0400                       # Есть подключение, слушаю вас
С: EHLO ADMIN                                                                                   # Здравствуй, сервер, я-ADMIN, расскажи, что у тебя есть
S: 250-*.ru Hello ADMIN [*.*.*.*]
S: 250-SIZE 52428800                                                                            # Есть ограничение по размеру
S: 250-PIPELINING
S: 250-AUTH PLAIN                                                                               # Есть авторизация по методу PLAIN
S: 250-STARTTLS 
S: 250 HELP
С: MAIL FROM:<adm@*.*.ru>                                                        # Прими емэйл отправителя
S: 250 OK                                                                                       # Есть!
С: RCPT TO:<sys-adm@bk.ru>                                                                      # Прими емэйл получателя
S: 550 relay not permitted                                                                      # Извините, тут не проходной двор. Представьтесь и запарольтесь

Отличие от механизма отправки с авторизацией вот в этой строчке

С: AUTH PLAIN YWQtQEE2ZnJwc1GvdHJlRm5hZTpvci5yPQBhwG1pMTBucm6zdG91cmmibmEkem4yLSJ1AhI4YeQ0jTp=  # Ок. Авторизуй меня методол PLAIN, вот реквизиты в base64

Что делать честному пользователю почты, а не спамеру

Настраивать почтового клиента, чтобы он авторизовался на SMTP-сервере. В данном случае не забыть явно указать метод авторизации PLAIN, ибо различные клиенты могут по умолчанию использовать различные методы авторизации


Решение проблем с почтой. Опросный лист

Общее

  1. Напишите почтовый ящик, с которого отправляется/принимается почта
  2. Напишите реквизиты подключения:
    • Имя пользователя
    • smtp-сервер
    • pop-сервер
  3. Укажите время попытки отправить/принять почту
  4. Укажите почтовый адрес, на который вы пытались отправить письмо
  5. Укажите название и версию программного обеспечения, с помощью которого отправляется/принимается почта
  6. Покажите полный текст ошибки отправления/приёма (или скриншот окна сообщения)

Канал связи

Определяется, не является ли причиной неисправности качество internet-канала. Значение в угловых скобках заменить на требуемое. Например <имя smtp-сервера>заменить на smtp.mail.ru

  1. Разрешено ли провайдером использование стандартного smtp-порта? Прислать вывод команды(или скриншот):
    1. Пуск
    2. Выполнить
    3. «cmd»(напечатать)
    4. «telnet <имя smtp-сервера> 25»(напечатать)
  2. Резолвится ли имя smtp-сервера? Прислать вывод команды(или скриншот):
    1. Пуск
    2. Выполнить
    3. «cmd»(напечатать)
    4. «nslookup <имя smtp-сервера>»(напечатать)
  3. Нет ли повреждений на линии до почтового сервера? Прислать вывод команды(или скриншот):
    1. Пуск
    2. Выполнить
    3. «cmd»(напечатать)
    4. «tracert <имя smtp-сервера>»(напечатать)