Smtp configuration in php

Отправка писем через SMTP на PHP

Некоторое время назад, я заметил, что письма, отправляемые с моего сервера, перестали доходить до адресата. Редко, попадали в папку Спам, чаще совсем не доходили. Сразу было понятно, что проблема в функции mail();

Пути решения было два: Читать много мануалов и настраивать сервак так, чтобы функция mail() корректно отправляла всю корреспонденцию или отправлять письма через SMTP. Как вы понимаете, путь я выбрал второй.

$config [ ‘smtp_debug’ ] = true ; //Если Вы хотите видеть сообщения ошибок, укажите true вместо false

$config [ ‘smtp_from’ ] = ‘МегаСервис’ ; //Ваше имя — или имя Вашего сайта. Будет показывать при прочтении в поле «От кого»

$SEND . = ‘Subject: =?’ . $config [ ‘smtp_charset’ ] . ‘?B?’ . base64_encode ( $subject ) . «=?=\r\n» ;

$SEND . = «From: \»=?» . $config [ ‘smtp_charset’ ] . «?B?» . base64_encode ( $config [ ‘smtp_from’ ] ) . «=?=\» <" . $config [ 'smtp_username' ] . ">\r\n» ;

if ( ! $socket = fsockopen ( $config [ ‘smtp_host’ ] , $config [ ‘smtp_port’ ] , $errno , $errstr , 30 ) )
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не могу отправить HELO!

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не могу найти ответ на запрос авторизаци.

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Логин авторизации не был принят сервером!

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Пароль не был принят сервером как верный! Ошибка авторизации!

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не могу отправить комманду MAIL FROM:

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не могу отправить комманду RCPT TO:

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не могу отправить комманду DATA

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo ‘

Не смог отправить тело письма. Письмо не было отправленно!

‘ ;
if ( $config [ ‘smtp_debug’ ] ) echo «

Проблемы с отправкой почты!

$response
$line
» ;
if ( $config [ ‘smtp_debug’ ] ) echo «

Проблемы с отправкой почты!

$response
$line
» ;

Использовать её можно так-же как и обычную функцию mail:

smtpmail ( ‘Имя получателя’ , ’email-получателя@mail.ru’ , ‘Тема письма’ , ‘HTML или обычный текст письма’ ) ;

Сколько писем можно отправлять с бесплатных (SMTP) почтовых ящиков?

  1. mail.ru — не более 1 письма в минуту
  2. yandex.ru — не более 150 писем в сутки, не более 25 адресатов в одном письме
  3. gmail.com, tut.by — не более 500 писем в сутки (хотя в справке гугла фигурирует 2000), не более 500 получателей в одном письме за раз при отправке через интерфейс gmail.com (через web-интерфейс, т.е. при входе через браузер), не более 100 получателей в одном письме за раз при отправке через ваш почтовый клиент
  4. rambler.ru — не более 200 писем в час
  5. ukr.net — не более 250 писем в сутки
  6. meta.ua — не более 200 писем в сутки
  7. aol.com — не более 500 писем в сутки
  8. lycos.com — не более 250 писем в сутки

Рекомендую отправлять количества писем на 20-30 % меньше лимита.

Gmail может заблокировать (первый раз на сутки) ваш аккаунт и при меньшем чем 500 числе адресатов в письме. Очень важно, чтобы адреса были живые, работающие. При нескольких десятках мертвых адресов в одном письме c gmail вероятность блокировки очень велика.

Читайте также:  Typescript if else if

Источник

Smtp configuration in php

Поведение этих функций зависит от установок в php.ini .

Конфигурационные опции отправки писем

Имя По умолчанию Место изменения Список изменений
mail.add_x_header «0» PHP_INI_PERDIR
mail.log NULL PHP_INI_SYSTEM|PHP_INI_PERDIR
mail.force_extra_parameters NULL PHP_INI_SYSTEM|PHP_INI_PERDIR
SMTP «localhost» PHP_INI_ALL
smtp_port «25» PHP_INI_ALL
sendmail_from NULL PHP_INI_ALL
sendmail_path «/usr/sbin/sendmail -t -i» PHP_INI_SYSTEM

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

Добавляет заголовок X-PHP-Originating-Script , который будет содержать UID скрипта и имя файла.

Путь к лог-файлу, в который будут записываться все вызовы функции mail() . Записи в логе содержат полный путь до скрипта, номер строки, адрес получателя To и заголовки.

Принудительно добавить указанные параметры для отправки в sendmail. Эти параметры всегда заменяют значение пятого параметра в mail() .

Используется только в Windows: домен или IP-адрес SMTP-сервера, к которому будет обращаться PHP при отправке почты функцией mail() .

Используется только в Windows: порт SMTP -сервера, к которому будет обращаться PHP при отправке почты функцией mail() ; по умолчанию 25.

Адрес, который будет использоваться в заголовке «From:» в письмах, отправляемых напрямую через SMTP (только для Windows). Эта директива также устанавливает заголовок «Return-Path:» .

Путь до программы sendmail, обычно /usr/sbin/sendmail или /usr/lib/sendmail . configure пытается найти sendmail автоматически и установить значение по умолчанию самостоятельно, но если это не удалось, вы можете установить путь здесь.

Системы, не использующие sendmail, должны установить эту директиву в путь до обёртки/заменителя sendmail. Например, пользователи » Qmail обычно устанавливают значение /var/qmail/bin/sendmail или /var/qmail/bin/qmail-inject .

qmail-inject не требует дополнительных опций для отправки писем.

Эта директива также работает и в Windows. Если она установлена, smtp , smtp_port и sendmail_from будут проигнорированы и выполнится указанная программа.

User Contributed Notes 8 notes

On Ubuntu 13.04, not sure of the other Distros.

If you simply uncomment the default:

sendmail_path = «sendmail -t -i»

Your mail() functions will all fail. This is because, you should place the FULL PATH (i.e. /usr/sbin/sendmail -t -i )

The documentation states PHP tries it’s best to find the correct sendmail path, but it clearly failed for me.

So, always enter in the FULLPATH to sendmail or you may get unexpected failing results.

As a secondary note: Those that just want to ENFORCE the -f parameter, you can do so in php.ini using:

You can leave the sendmail path commented out, it will still use the defaults (under UNIX -t -i options which if you look them up are very important to have set).

But, now there is no way to change this, even with the 5th argument of the mail() function. -f is important, because if NOT set, will be set to which ever user the PHP script is running under, and you may not want that.

Читайте также:  Все символы html стрелки

Also, -f sets the Return-Path: header which is used as the Bounce address, if errors occur, so you can process them. You you can not set Return-Path: in mail() headers for some reason. you could before. Now you have to use the -f option.

The documentation should be made clear that sendmail does NOT default to -t -i when using just /usr/sbin/sendmail. You literally need to specify the options.

I know this might seem like a no-brainer but I wasted hours trying to get mail() to work only to discover that the sendmail program is NOT passed -t and -i by default as stipulated in the documentation.

If anyone gets this cryptic error message in the PHP error logs:
«sh: -t: command not found»
after upgrading from PHP 5.4, this may be the solution for you.

I upgraded PHP from 5.4 to 5.6 and all our mail() functionality suddenly broke, with no useful error logging.

If this is you, and you’ve been using ini_set() to set the «sendmail_path» then note that even though it’s apparently not mentioned in the upgrade documentation — or anywhere else I could find on php.net (or a dozen forums) — you’ll now need to go set the sendmail_path in your php.ini file; it is now ignored if you use ini_set() to specify a path to the sendmail binary on the fly.

So, just specify «sendmail_path» in php.ini instead. That’s all there is to it — that fixed all the mail() functionality for us.

Hope this little note saves someone else as much time as I spent troubleshooting and researching. Cheers!

It is worth reiterating that, as stated above, sendmail_path also works for Windows, overriding other Windows SMTP settings.

The comment in php.ini, “For Unix only”, does not make that clear.

This makes it relatively easy to substitute a fake sendmail program or even a shell script/batch file to save mail to a text file.

I use this technique when teaching or testing in PHP.

For linux you can over-ride the default «From» for the outgoing emails by including in php.ini this line:

sendmail_path = «/usr/sbin/sendmail -t -i -f fromMe@blah.com»

The path should work for most linux installations.

Return-path header does not work because it is not part of smtp.

on *nix -f may be set on the mail command
alternatively
some MTAs accept mbox-style «From » header on the first header line
note: no colon after «From» , must be the first header line
or you may be able to re-configure you MTA to interpret return-path headers

-f is the most reliable method but it may mean that you can’t set any other command-line option due to shell escaping problems.

also note that email formatting requirements differ between windows and everything else. sendmail expects only \n line-endings

On Darwin OS such as OSX (current one: 10.8.3) you need to add a specific command and option to the sendmail_path constant if you have downloaded and installed a mamp with a stack.

Читайте также:  Тег SELECT, атрибут disabled

Indeed you can see the required libraries for PHP, Apache, MySQL in «common/lib» folder. The problem is when you run an external command using these libraries, for example «sendmail». It could be a problem if it gets the stack libraries and not the system ones (different versions, etc).

The «env -i» command clean the Stack environment variables and run «sendmail» with the system libraries.

Ненавижу всякие денверы и ёбн серверы.

У меня голый апач на винде 10 и на нем 6 версий пхп от 5.6 до самой последней. 🙂
Все устанавливается и конфигиться за минуты. 🙂
Все версии пхп конфигяться отдельно и работают одновременно. На разных виртуальных хостах и портах.
Не надо ничего переключать и перезапускать.

У меня еще есть виртуальная машина(WmVare) c FreeBSD 13.
Там, например, Redis.
С пхп на винде все работает.

Так вот вопрос:
можно ли юзать sendmail с виртуальной машины на юниксе
в пхп на винде?
Было бы замечательно.

Зы в идеале хочу перенести апач с пхпями на виртуальную машину с юникс.
А загружать пхп скрипты с браузера под виндой.
Там уже установлен апач и последняя версия пхп.
И еще perl и Go. (Зачем не знаю. 🙂 Было по приколу поковырять конфиги и понастраивать 🙂 )

Но пока не разобрался как в юниксах подтянуть к голому апачу несколько версий пхп. 🙁

Источник

Отправка почты через SMTP с помощью PHP

Отправка почты через SMTP с помощью PHP на картинке

Здравствуйте дорогие читатели. В этой записи я расскажу Вам как отправить письмо с вашего сайта через SMTP сервер. Перед тем, как отправлять письма через SMTP необходимо обязательно настроить DMARC, DKIM, SPF. Если не настроить, ваши письма будут попадать в спам, но нам этого не нужно. Статья — Как настроить DMARC, SPF, DKIM подпись на своем сайте.

Готовый класс — PHP

Для начала загрузите готовый класс, по ссылке — SendMailSmtpClass.php.zip

Распаковываем архив, и размещаем в любую директорию на Вашем сайте.

Настройка класса

Настройка очень простая. Разместите этот код на странице, которая присутствует на каждой. Обычно это — страница конфига.

require_once "SendMailSmtpClass.php"; // подключаем класс //ДЛЯ YANDEX.RU $mailSMTP = new SendMailSmtpClass('mail@yandex.ru', 'pass', 'ssl://smtp.yandex.ru', 465, "UTF-8"); //ДЛЯ MAIL.RU $mailSMTP = new SendMailSmtpClass('mail@mail.ru', 'pass', 'ssl://smtp.mail.ru', 465, "UTF-8"); //РАСШИФРОВКА ЗНАЧЕНИЙ $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'порт', 'кодировка письма');

Код отправки самого письма:

$from = array("Блог программиста", // Имя отправителя "support@212d.ru" // почта отправителя ); $result = $mailSMTP->send('Кому письмо, можно через , два получателя', 'Тема письма', 'Текст письма', $from); 

$result возвращает либо true — успешная отправка, либо false — ошибка.

Прикрепление файлов к письму

$mailSMTP->addFile("file1.jpg"); $mailSMTP->addFile("file2.jpg");

В итоге, если Вы все настроили правильно Ваше письмо будет отправляется через этот SMTP сервер с подписей DKIM, и не попадет в спам.

Пишите свои вопросы, предложения в комментариях помогу Всем!

Источник

Оцените статью