Отправка почты через smtp с локального сервера
Содержание:
- Windows 7 запускается, но показывает только черный экран и указатель мыши
- Using PHP mail() Function
- dum
- Что делать, когда функция mail в PHP не отправляет письма?
- Бизнес модель сервиса Dropbox
- Почему Windows 10 выходит из сна, как устранить такую самостоятельность
- Настройка почты ssmtp для PHP mail()
- Настройка конфигурации Windows
- Формат почтового сообщения
- Описание класса
- Популярные выражения со словом «стакан»
- Отправка писем через SMTP с помощью PHPMailer на примере Yandex и Google
- Как настроить подключение SMTP
- Грамотное использование русских символов в заголовках почтового сообщения
- Names 4 Brands
- Troubleshooting Common PHP Mail and PHPMailer Errors
- Частые ошибки, возникающие при отправке PHP формы с сайта
- Помещаем HTML и PHP код отправки формы в один файл
- Что это такое
Windows 7 запускается, но показывает только черный экран и указатель мыши
Using PHP mail() Function
To use this function, make sure that your hosting provider allows you to manually manage the Sendmail service option.
Having trouble sending mails? PHP mail() is enabled by default on Hostinger.
By default, the Sendmail service is already enabled. Nonetheless, you should double-check it just to be sure.
Creating a Test File for PHP Mail
First of all, you need to create a file for the PHP mail script and place it in the public_html directory so that it can be easily accessed through the domain name.
- To access the hPanel, click on the File Manager -> Go to File Manager.
-
Create a new file by clicking on Add New. Let’s name the file testmail.php and then hit Create.
-
Double click on the testmail.php since we’re going to edit it using the PHP mail() function. Here’s an example of the basic components of the function we’ll be using in this tutorial. These will be explained in more detail in the next section. For now, click Save & Close when you’re done editing.
- Now, you can send an email by accessing YourDomain/testmail.php from the browser. Keep in mind that you must change YourDomain to the domain you’ve used to create testmail.php.
-
Your target email will receive the message you’ve sent.
Understanding PHP Mail Components
However, if you need more information about the Sendmail function and its components, you can refer to the official PHP documentation.
Here is the PHP syntax we’ve used in the previous section:
<?php ini_set( 'display_errors', 1 ); error_reporting( E_ALL ); $from = "test@hostinger-tutorials.com"; $to = "test@hostinger.com"; $subject = "Checking PHP mail"; $message = "PHP mail works just fine"; $headers = "From:" . $from; mail($to,$subject,$message, $headers); echo "The email message was sent."; ?>
Let’s break it down step-by-step:
ini_set( 'display_errors', 1 ); error_reporting( E_ALL );
These first two lines enable error reporting — they will tell you if the script fails to execute.
$from = "test@hostinger-tutorials.com";
$to = "test@gmail.com";
$subject = "Checking PHP mail";
$message = "PHP mail works just fine";
Here you can compose your message.
$headers = "From:" . $from;
Specifies vital information, such as the sender address, the reply-to location, etc.
mail ($to,$subject,$message,$headers);
This line is used for executing the function.
echo "The email message was sent.";
A message that will appear once the script is executed successfully.
dum
Что делать, когда функция mail в PHP не отправляет письма?
Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция mail() может не работать, если она занесена в php.ini в раздел запрещённых (disable_functions).
Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта:
<? print mail("name@my.ru","header","text"); ?>
Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. Что касается кодировки, то рекомендуется использовать UTF-8.
Бизнес модель сервиса Dropbox
Почему Windows 10 выходит из сна, как устранить такую самостоятельность
В первую очередь (логично) узнать кто или что являлось причиной включения ноутбука/компьютера. Об этом можно узнать, есть открыть журналы Windows (современная ОС многие свои действия записывает в журнал, в том числе, время включения/выключения).
И так, чтобы открыть этот журнал, необходимо сначала зайти в панель управления Windows в раздел «Система и безопасность», далее перейти во вкладку «Администрирование» (см. скрин ниже ).
Система и безопасность, Администрирование
После чего открыть ссылку «Просмотр событий».
Просмотр событий (во вкладке администрирование)
Здесь нужно в меню слева выбрать «Журналы Windows/Система».
Далее перед вами должны предстать сотни событий (по умолчанию они отсортированы по дате появления)
Нам нужно посмотреть те, в графе которых «Источник» содержится причина «Power-Troubleshooter» (также обратите внимание на время выхода. Благодаря этому, сможете найти нужное событие)
Когда откроете событие — увидите источник выхода. По сути, это и есть причина, почему ваш ноутбук/ПК пробудился.
Источник выхода — расширяемый хост-контроллер Intel(R) USB 3.0
Например, если в источнике выхода содержится «Кнопка питания» — значит кто-то вывел ноутбук из режима сна с помощью этой кнопки.
Еще один пример // Источник выхода — кнопка питания
Возможные варианты в источнике выхода:
- кнопка питания — под это иногда подпадает не только непосредственно сама кнопка, но и открытие/закрытие крышки ноутбука. Добавлю, что возможно сбои в тех случаях, когда у вас проблема с мат. платой или с самой кнопкой;
- устройство, название которого содержит «HID» — это либо мышка, либо клавиатура, либо еще что-то подобное (джойстик, например). Отмечу, что часто эти устройства могут срабатывать «автоматически»: хватит даже совсем небольшой вибрации вашей мышки (например, если положите что-то на стол с ней);
- таймеры — обычно подобное происходит, если у вас в планировщике заданий установлена какая-то задача (например, обновить систему!);
- сетевой адаптер — этот источник выхода говорит о том, что ваш адаптер настроен так, чтобы ПК пробуждался при подключениях к нему;
- хост-контроллеры (вариантов названий может быть много) — причина обычно в подключенных устройствах к USB портам;
- нет данных — самый неприятный источник выхода, который также встречается в журнале. В этом случае порекомендую все равно проделать нижеперечисленные рекомендации (в большинстве случаев помогает решить проблему).
Как найти и запретить устройствам выходить из режима сна
Для того, чтобы увидеть все устройства, которым разрешено будить ноутбук/компьютер, откройте командную строку (нажмите сочетание Win+R, введите команду cmd и нажмите Enter).
В командной строке введите одну команду: powercfg -devicequery wake_armed
В моем случае нашлось одно оборудование — HID-совместимая мышь.
HID-совместимая мышь будит ПК
Далее нужно открыть диспетчер устройств (Win+R, затем команду devmgmt.msc).
В диспетчере устройств найдите то устройство, которому хотите запретить пробуждать ПК (в моем случае HID-совместимая мышь). Щелкните по нему правой кнопкой мышки и выберите свойства.
Свойства HID-совместимой мышки // Диспетчер устройств
В свойствах во вкладке «Управление электропитанием» снимите галочку с разрешения выводить компьютер из ждущего режима. Сохраните настройки, и на этом, вообще-то всё, дальше можно пользоваться компьютером спокойно…
Снимаем галочку с разрешения будить
Добавлю, если у вас несколько устройств — можете поочередно также запретить им всем выводить ПК/ноутбук из ждущего (спящего) режима. Тогда в итоге вы сможете сделать так, что ваш ноутбук будет выходить из него только с помощью кнопки питания.
Как отключить таймеры пробуждения (чтобы никакое обновление или проверка не могла включить ПК)
Для этого необходимо зайти в настройки электропитания (панель управления, затем раздел «Оборудование и звук/Электропитание /Настройки схемы электропитания (текущей схемы!)»).
Далее откройте дополнительные настройки электропитания (см. скрин ниже).
Изменить доп. параметры питания
В них необходимо открыть вкладку «Сон/Разрешить таймеры пробуждения» и поставить значения «Отключить» (см. скрин ниже ). Сохраните настройки и перезагрузите ПК.
Отключаем таймеры пробуждения
Теперь при уходе в спящий режим — никакой планировщик заданий не должен будить ваше устройство!
Также, на всякий случай, откройте панель управления Windows по следующему адресу:
Проверьте, не стоит ли там галочка, разрешающая пробуждать ПК на автоматическое обслуживание в запланированное время (снимите ее, если эта опция у вас включена).
Автоматическое обслуживание
Кстати, поздравляю всех с 23 февраля!
На этом пока всё. Всем всего хорошего!
Первая публикация: 23.02.2018
Корректировка: 5.06.2020
Настройка почты ssmtp для PHP mail()
17 октября 2013, 20:05
Пришлось на днях настраивать почту на тестовом веб-сервере. Нужно это для того, чтобы наше серверное приложение могло отправлять пользователям уведомления на почту. Выделенный настроенный почтовый сервер имеется, поэтому нужно было всего-навсего настроить какой-нибудь MTA на пересылку почты. Так как с админством уже завязал (да и ранее почту под линукс настраивать не приходилось), то пришлось найти несколько готовых варинатов из которых слепил свой. Собственно здесь закладка для себя (вдруг когда-нибудь пригодится).
Сервер на котором выполнялась настройка: Ubuntu 12.04 LTS.
По рекомендациям в интеренете решил установить там простенький МТА — ssmtp:
$ sudo apt-get install ssmtp
Затем нужно отредактировать конфигурационные файлы ssmtp:
sudo nano /etc/ssmtp/ssmtp.conf
12345678910111213141516171819202122232425 | # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=ubuntu # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.remotemailserver.com # Where will the mail seem to come from? rewriteDomain=server.com # The full hostname hostname=dev.server.com # Are users allowed to set their own From: address? # YES — Allow the user to specify their own From: address # NO — Use the system generated From: address FromLineOverride=YES AuthUser=YOUR_MAIL_USER AuthPass=PASS UseSTARTTLS=YES |
$ sudo nano /etc/ssmtp/revaliases
12345678 | # sSMTP aliases # # Format: local_account:outgoing_address:mailhub # # Example: root:your_login@your.domain:mailhub.your.domain # where is an optional port number that defaults to 25. www-data:support@server.com:smtp.remotemailserver.com ubuntu:support@server.com:smtp.remotemailserver.com |
Правим php.ini
$ sudo nano /etc/php5/apache2/php.ini
Ищем параметр sendmail_path и прописываем в нем путь к ssmtp:
1 | sendmail_path = /usr/sbin/ssmtp -t |
либо /usr/sbin/sendmail -t
Так как sendmail это ссылка на ssmtp:
lrwxrwxrwx 1 root root 5 Jan 1 2012 /usr/sbin/sendmail -> ssmtp
Не разбирался зачем ключ -t (в мане написано, что он игнорируется ssmtp).
Делаем рестарт апача:
$ sudo service apache2 restart
Код проверки (PHP)
123456789101112 | <?php $to = ‘myaddress@gmail.com’; $subject = ‘Test Email’; $message = ‘Hello Igor’; $headers = ‘From: Support Team <support@server.com>’ . «\r\n» . ‘Reply-To: support@server.com’ . «\r\n» . ‘MIME-Version: 1.0’ . «\r\n» . ‘Content-Type: text/html; charset=utf-8’ . «\r\n» . ‘Content-Transfer-Encoding: quoted-printable’; mail($to, $subject, $message, $headers); ?> |
То есть создаем файл с расширением PHP, например, testmail.php запускаем его из командной строки:
$ php testmail.php
Письмо пришло.
Но из нашего веб приложения письма уходить отказались. 🙁 Смотрел логи, апача, почты, но все свелось к тому, что пришлось все удалить и настроить postfix. С ним все заработало как нужно. По настройке Postfix также нужно будет сделать себе закладочку на всякий случай…
Спасибо за то что поделились ссылкой! | |||
Теги: ПочтаРубрика: Закладки | (RSS)
Настройка конфигурации Windows
В операционной системе Windows необходимо задать в файле php.ini значения двух переменных:
- SMTP
-
Строка, содержащая имя DNS или IP-адрес сервера SMTP, который перенаправляет почту, получаемую от компьютера под управлением Windows, на котором установлена система PHP. Если сервер SMTP находится на том же компьютере, где установлена система PHP, то в качестве значения параметра SMTP необходимо указать localhost.
- sendmail_from
-
Строка, содержащая адрес электронной почты, применяемого по умолчанию отправителя почты PHP (например, mailbot@example.com).
В программное обеспечение сервера IIS4 и последующих версий встроен сервер SMTP, который обладает меньшим набором функций, чем Exchange Server. С этим сервером SMTP удобнее работать, если вам не требуется вся мощь программы Exchange Server.
Формат почтового сообщения
Для того чтобы быть уверенным, что ваше сообщение отправляется действительно верно, необходимо иметь по меньшей мере базовые представления о формате почтового сообщения. Формат почтового сообщения описан в нескольких стандартизирующих документах, основными из которых являются RFC 822 (описывает формат передачи простого текста на английском языке) и RFC 2045 (описывает расширения этого формата для передачи произвольных данных).
Ниже приведен самый простой пример текстового сообщения, составленного в соответствии с приведенными выше стандартами и готового к отправке:
Именно в таком формате клиент для отправки почты (MS Outlook, TheBat! или Mozilla Thunderbird) подготавливает сообщение, а затем отправляет его получателю (кстати, большинство почтовых клиентов позволяют просмотреть исходный код сообщения, в Mozilla Thunderbird, например, для этого служит комбинация клавиш ). Задача нашего скрипта на языке PHP — добиться точно такого же формата письма.
Как видно из приведенного выше примера, электронное письмо содержит две части: в одной (верхней) размещаются заголовки, а в другой (нижней), собственно, текст письма. Отделены эти части друг от друга пустой строкой. Заголовки состоят из строк, в которых содержится тема письма (Subject), имя и адрес отправителя (From), получателя (To) и другая информация. В самом простом случае каждая строка содержит пару «ИмяЗаголовка: ЗначениеЗаголовка». Особенно необходимо подчеркнуть, что, согласно стандартам, в заголовках ни при каких обстоятельствах не должны содержаться русские символы.
Описание класса
smtp_on( smtp_server, login, password, , )
-
smtp_server: для соединения с smtp по обычному протоколу указывается сервер в обычном формате, например «smtp.mail.ru».
Для соединения с сервером по защищенному протоколу, например с gmail.com, нужно добавить перед сервером » ssl://», например «ssl://smtp.gmail.com». Так же не забудьте указать порт, для защищенных соединений он обычно 465. - login: логин для авторизации через smtp
- password: пароль для авторизации smtp
- port: порт для соединения smtp. Если порт стандартный, можно не указывать, по умолчанию 25
- timeout: таймаут соединения. По умолчанию стоит 5 секунд. Обычно менять не нужно, но если smtp тормозной или ваш конект к серверу длиный, можно увеличить.
Attach( filename, , , )
filename : путь к файлу на диске
new filename : какое имя будет у файла в письме. если ничего не указать, имя файла останется оригинальным.
mimetype : MIME-тип файла. Если не указать, то тип будет ‘application/x-unknown-content-type’.
disposition : команда для почтового клиента, как ему отображать вложение. inline (по умолчанию), при просмотре письма вложение должно отображаться непосредственно в самом теле письма, например картинка
attachment, вложение не будет отображаться в самом письме, оно будет как прикрепленный файл.
Не все почтовые программы обращают внимание на этот параметр.
Популярные выражения со словом «стакан»
Отправка писем через SMTP с помощью PHPMailer на примере Yandex и Google
Можно так же отправить письмо через другой почтовик, например, через Яндекс. Код будет выглядеть примерно так:
// Подключаем библиотеку PHPMailer use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; require 'PHPMailer/PHPMailer.php'; require 'PHPMailer/SMTP.php'; // Создаем письмо $mail = new PHPMailer(); $mail->isSMTP(); // Отправка через SMTP $mail->Host = 'smtp.yandex.ru'; // Адрес SMTP сервера $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'login'; // ваше имя пользователя (без домена и @) $mail->Password = 'password'; // ваш пароль $mail->SMTPSecure = 'ssl'; // шифрование ssl $mail->Port = 465; // порт подключения $mail->setFrom('login@ya.ru', 'Иван Иванов'); // от кого $mail->addAddress('test@ya.ru', 'Вася Петров'); // кому $mail->Subject = 'Тест'; $mail->msgHTML("<html><body> <h1>Здравствуйте!</h1> <p>Это тестовое письмо.</p> </html></body>"); // Отправляем if ($mail->send()) { echo 'Письмо отправлено!'; } else { echo 'Ошибка: ' . $mail->ErrorInfo; }
Отправка писем через Google имеет один нюанс: нужно в аккаунте google разрешить доступ ненадежным приложениям. Для этого нужно зайти в свой аккаунт https://myaccount.google.com, перейти в безопасность, зайти в раздел «Ненадежные приложения, у которых есть доступ к аккаунту» и там переключить в «Разрешено». На момент написания статьи это страница https://myaccount.google.com/u/0/lesssecureapps.
Дальше в php-программе отправка писем через PHPMailer происходит аналогично как через yandex, нужно только заменить настройки SMTP так:
$mail->Host = 'smtp.gmail.com'; // Адрес SMTP сервера $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'login'; // ваше имя пользователя $mail->Password = 'password'; // ваш пароль $mail->SMTPSecure = 'ssl'; // шифрование ssl $mail->Port = 465; // порт подключения
Если первый раз запускаете программу отправки через smtp, тогда желательно перед отправкой дополнительно использовать $mail->SMTPDebug = 1; чтобы получать все сообщения клиента и smtp-сервера, т.е. на экран выведется весь процесс подключения, авторизации и т.д., что очень полезно для отладки вашей программы.
Как настроить подключение SMTP
Чтобы настроить нормальную отправку писем, нужно установить плагин WP Mail SMTP. Он позволяет переконфигурировать стандартный PHP Mailer так, чтобы была возможность подключаться к SMTP серверу. Также, советую использовать его, если вы пользуетесь локальным сервером.
Настройка WP Mail SMTP
А вот описание опций
- From Email — email отправителя. Вводим логин от почты полностью как на изображении вверху
- From Name — Имя отправителя. Можете поставить сюда что хотите, например, адрес вашего сайта
- Mailer — выбираем
- Return Path — оставляем пустым
- SMTP Host — адрес SMTP сервера. Вводим
- SMTP Port — порт SMTP сервера. Вводим
- Шифрование— тип шифровки писем. Выбираем
- Авторизация— авторизация. Выбираем
- Username — логин от почты. Значение должно совпадать с From Email
- Password — пароль от почты
Грамотное использование русских символов в заголовках почтового сообщения
Итак, в явном виде русский текст в заголовке присутствовать не должен, поэтому для того чтобы включить его туда, этот текст предварительно нужно закодировать. Стандарты описывают способ кодирования «запрещенных» символов. Общий формат выглядит так:
Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».
Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).
К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:
Здесь предполагается, что в переменной у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.
Names 4 Brands
Troubleshooting Common PHP Mail and PHPMailer Errors
Errors can occur from time to time while using PHP mail or PHPMailer. Here’s a list of the most common issues and ways how you can fix them.
Gmail Couldn’t Verify That YourDomain.com Sent This Message
If you see this warning when testing a PHP mail script, it could mean one of the following:
- Your SPF record is not enabled. You can find the steps on how to add one here.
- You’ve sent an email from an address that does not exist or does not belong to you. Make sure to use valid SMTP authentication details.
Mail Goes to the Spam Folder
There are various reasons why a PHP mail can turn up as spam. Here are some of the most common ones:
- Misleading or spam-like subject. A few examples of that would be “test” or “testing”, “hello“, “urgent” or anything similar. Make sure that you set a clear intent in your message subject.
- You’re using an incorrect sender address that invokes the security measures to filter your email. This is done as prevention from email spoofing and scams.
- You are using spam trigger words. This category includes phrases like “great offer” “click here” “special promotion” “this is not spam” and so on. Try changing up your message content to see if that’s the case.
- Your mailing list does not have an unsubscribe button. When there are a lot of people who report your emails as spam, you will find it difficult to avoid the spam filter. Having an unsubscribe button is a great way to prevent this and invoke more trust from your readers.
Частые ошибки, возникающие при отправке PHP формы с сайта
Первая, наверное самая популярная ошибка, это когда вы видите пустую белую страницу без сообщений. Это означает, что вы допустили ошибку в коде страницы. Вам нужно включить отображение всех ошибок в PHP и тогда вы увидите, где допущена ошибка. Добавьте в код:
Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.
Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.
Еще одна частая ошибка, когда появляется оповещение «Сообщение успешно отправлено», а письмо не приходит на почту. В этом случае нужно внимательно проверить строку:
Помещаем HTML и PHP код отправки формы в один файл
Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.
Давайте посмотрим как изменить PHP код в файле send.php:
Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы — «если существует, то показать форму». А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке <form action=»send.php» method=»post»>. Форма должна ссылаться на эту же страницу, например index.php. В код я добавил заголовок страницы.
Что это такое
Mail применяется для отправки сообщений при условии что будут выполняться некоторые правила. Самое главное — эта функция не подходит для пересылки большого числа писем. Потому что после каждой отправки она закрывает, а потом опять открывает соединение с почтовым сервером. Это приведет к перерасходу мощностей на хостинге.
Настройка функции происходит в конфигурационном файле php.ini. В нем прописывают путь к лог-файлам, задают значение порта и так далее.
Mail принимает пять аргументов из которых три — обязательные:
- Адрес отправителя;
- Тайтл письма;
- Текст сообщения.
Например, напишем такие строки кода
<?php mail("test@yandex.ru", "Заголовок", "Текст сообщения"); ?> |
Если вы пользуетесь Денвером, то информация, которую вы отправили, сохранится на виртуальном диске Z папке «tmp\!sendmail». Если вы забыли, как установить данный локальный сервер, то советую почитать статью «Как быстро установить Denver».