• личный кабинет

Отправка почтовых сообщений с сайта или сервера

Отправка почтовых сообщений с сайта или сервера

Важное замечание про исходящий спам

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

Общая идея отправки писем с сайта

  • Если отправляете через хостинг, обратный адрес письма (поле FROM) должен быть зарегистрированным ящиком или псевдонимом на нашем хостинге (направление пересылки не важно). Иначе письмо не дойдет.
  • Если вы хотите отправлять почту с VDS или сервера напрямую, обратитесь в поддержку для открытия порта 25.
  • Если вы хотите отправлять почту с сайта напрямую через внешние службы почты, типа Яндекс, Mail.ru, и так далее, посмотрите раздел личного кабинета "Отправка почты на внешние SMTP сервера". Потребуется аренда своего IP.
  • Примеры для популярных языков программирования приведены далее.
  • Для PHP работает стандартная функция mail(), ничего настраивать не нужно, кроме обратного адреса.
  • Для других языков программирования или систем - SMTP сервер robots.1gb.ru, порт 25, без авторизации.
  • Если вам нужно отправлять письма с DKIM / DMARC, то посмотрите эту инструкцию и действуйте по ней.
  • Использовать SMTP сервера ящиков хостинга нельзя. Обычные почтовые сервера хостинга - только для людей.

Отправка почты через внешние SMTP сервера

Это нужно в том случае, если у вас почта на Яндекс, Mail.ru, Gmail и так далее, и вы хотите от её имени отправлять почту с хостинга.

Если у вас VDS или сервер, вы может использовать прямое подключение к SMTP серверам этих служб. Если оно не работает, возможно, вам нужно обратится в поддержку для того, чтобы вам открыли нужные порты, это бесплатно.

Если вы хотите настроить такую отправку с сайта, то посмотрите раздел личного кабинета "Отправка почты на внешние SMTP сервера". Там вы сможете зарегистрировать доступ к нужным вам внешним SMTP серверам. Потребуется аренда своего IP, который нужен, чтобы соседи по хостингу не мешали вам в доступе к этим серверам, вызывая блокировки. Это стоит около 160 рублей в месяц (зависит от периода оплаты), нужно добавить в тариф. Можно воспользоваться IP адресом услуги "SSL / HTTPS, выделенный IP адрес", если она уже есть.

Обратный адрес почты ваших писем

Последнее время набирает популярность технология DMARC, которая описана, например, тут:
https://habrahabr.ru/company/mailru/blog/282602/.

Краткая суть в том, что если у вас есть обратный адрес в домене mail.ru (как пример), то отправлять почту вы можете ТОЛЬКО с использованием серверов mail.ru, иначе ваша почта будет жестко считаться спамом. К сожалению, ни хостинг, ни mail.ru не предлагает никаких средств отправки почты из сайта с помощью SMTP сервера mail.ru, это не будет нормально работать по множеству разных причин на обоих сторонах.
Это относится не только к mail.ru, провайдер приведен просто как пример.

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

Длинные строки в письмах ("письмо обрезается" итд)

Часто допускаемой ошибкой является создание сообщений с большой длиной строк. Такие сообщения могут доходить в искаженном или обрезанном виде.
Особенно часто это правило нарушается при некорректном создании HTML сообщений - перенос строк там кодируется символами <br>, таким образом, символы переноса строк в исходном тексте сообщения могут вообще отсутствовать.

Помните, что по MIME и RFC стандартам, которые используются для передачи почтового сообщения, длина строки сообщения не может превышать 80 символов (ориентировочно). Вам необходимо вставлять переносы строк искусственно, если ваше сообщение содержит длинные строки.

Это относится к кодировке сообщения 8bit, когда тело сообщения передается без кодировки.
В том случае, если тело сообщения кодируется (например, base64), длина итоговых строк может быть любой, но длина строки, используемый для передачи сообщения (т.е. содержащая данные в base64) опять же не может превышать 80 символов.

PHP

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

Если вам нужно отправлять письма с применением DKIM / DMARC, то посмотрите эту инструкцию и действуйте по ней.

В целом вы можете воспользоваться стандартной функцией mail(). Будьте грамотны при конструировании русских писем! Иначе придут крокозябры.

Письма робота 1Gb.ru отправляются, например, такой функцией:

function _mail ($from, $to, $subj, $what)
{
	mail($to, $subj, $what, 
		"Mime-Version: 1.0\n".
		"Date: ".date('r')."\n".
		"From: $from\n".
		"Reply-To: $from\n".
		"Content-Type: text/plain; charset=windows-1251\n".
		"Content-Transfer-Encoding: 8bit"
		);
}
_mail ('suppart@2gb.ru', 'customer@live.com', 'Привет!', 'Дорогой Андрей, пишу вам письмо.');
        ^^^^^^^^^^^^^^  заменить на СУЩЕСТВУЮЩИЙ НА ХОСТИНГЕ обратный адрес

Обратите внимание на переводы строк в строковой константе - они должны присутствовать.
Если вы хотите отправлять HTML письма, вы должны дописать в константу заголовков вместо строки Content-type следующую, например, строку:

Content-Type: text/html; charset=windows-1251

PERL

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

Для отправки почты вы можете воспользоваться модулем Net::SMTP.

Пример скрипта выглядит примерно так:

use Net::SMTP;
use POSIX 'strftime';
my $Date = strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time()));
$smtp = Net::SMTP->new('robots.1gb.ru');
$smtp->mail('from@me.ru');
$smtp->to('to@him.ru');
$smtp->data();
$smtp->datasend("From: <support\@1gb.ru>\n");
$smtp->datasend("To: <to\@him.ru>\n");
$smtp->datasend("Reply-To: <from\@me.ru>\n");
$smtp->datasend("Date: $Date\n");
$smtp->datasend("Content-Type: text/plain; charset=windows-1251\n");
$smtp->datasend("Content-Transfer-Encoding: 8bit\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message!\n");
$smtp->dataend();

Советуем почитать об этом более подробно в описании PERL-а.

ASP

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

Важно: Из-за многочисленных технических проблем, недоразумений и сложностей в работе мы не рекомендуем и не поддерживаем использование отправки сообщений с помощью CDONTS.

Вариант 1.
Рекомендуем пользоваться компонентой Persits.MailSender (AspEmail), которая установлена на всех наших серверах. Для отправки используйте SMTP сервер robots.1gb.ru.
Пример использования на нашем сервере:

<%
set mm = Server.CreateObject("Persits.MailSender")
	mm.Host = "robots.1gb.ru"
	mm.From = "support@1gb.ru"
	mm.FromName = "1Gb support"
	mm.AddAddress "dmih@in-solve.ru"
	mm.AddCustomHeader "Content-Type: text/plain; charset=windows-1251"
	mm.AddCustomHeader "Content-Transfer-Encoding: 8bit"
	mm.Subject = "Тестовое сообщение"
	mm.IsHTML = 0
	mm.Body = "Тестовое сообщение (по-русски)"
	mm.Send
%>

Документацию по этому компоненту можно прочитать здесь.

Вариант 2.
Для совместимости мы также предоставляем поддержку SMTPRus 2.1, которая также установлена на наших серверах.
Не рекомендуем вам пользоваться этим объектом, т.к. он сильно устарел и не обеспечивает надежной работы. Было замечено, что часто вместо отправки письма происходит ошибка (500 ошибка сервера), вызванная несовместимостью объекта с современными программными средами.
Авторскую инструкция к SMTPRus можно прочитать здесь.

ASP .NET 2

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

Если вам нужно отправлять письма с применением DKIM / DMARC, то посмотрите эту инструкцию и действуйте по ней.

Для отправки используйте SMTP сервер robots.1gb.ru. Вы можете использовать стандартную функциональность объекта System.Web.Mail:

System.Web.Mail.MailMessage m = new System.Web.Mail.MailMessage();
m.From = from;
m.To = to;
m.Subject = subject;
m.Body = what;
m.BodyFormat = System.Web.Mail.MailFormat.Text;
m.BodyEncoding = System.Text.Encoding.GetEncoding("windows-1251");
System.Web.Mail.SmtpMail.SmtpServer = "robots.1gb.ru";
System.Web.Mail.SmtpMail.Send (m);

Важно: При явной ошибке в адресе или любых других ошибках генерируется исключение с комментарием 'SendMessage() failed: Could not access 'CDO.Message' object.', которое не следует воспринимать как общую системную ошибку. Это всего лишь ошибка при отправке конкретного сообщения.

ASP .NET 4, .NET Core 2+

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

Если вам нужно отправлять письма с применением DKIM / DMARC, то посмотрите эту инструкцию и действуйте по ней.

Для отправки используйте SMTP сервер robots.1gb.ru. Вы можете использовать стандартную функциональность объекта System.Net.Mail, схематичный пример далее:

MailMessage mailObj = new MailMessage (from, to, subject, body);
SmtpClient SMTPServer = new SmtpClient ("robots.1gb.ru");
SMTPServer.Send(mailObj);

Parser 3.x +

Важное замечание: обратный адрес письма должен быть зарегистрированным ящиком на нашем хостинге!

SMTP сервер уже настроен, для отправки сообщений достаточно написать следующее:

^mail:send[
   $.charset[koi8-r]
   $.from[Поддержка <support@1gb.ru>]
   $.to[Адресат <to@him.ru>]
   $.subject[Тестовое сообщение]
   $.text[Текст тестового сообщения]
]

Подробнее о технологии Parser на нашем хостинге можно почитать здесь.