Отправка писем через smtp с авторизацией на php
Содержание:
- How to use PHPMailer with Gmail
- Грамотное использование русских символов в заголовках почтового сообщения
- Описание
- Debugging
- History
- Отправка подписанного и зашифрованного письма через PHPMailer
- Дополнения
- Contributing
- Отправка письма с вложением с помощью PHPMailer
- Создаем файл, принимающий данные из HTML формы
- Помещаем HTML и PHP код отправки формы в один файл
- Что это такое
- Installation & loading
- Other upgrade changes
- Лирическое отступление
- Why/When to use the mail PHP
- Documentation
- Loading PHPMailer
- Localization
- Установка и настройка почтового сервера
How to use PHPMailer with Gmail
Encryption
Here are the basic Gmail SMTP credentials:
or
If you don’t use the 2-step verification for your account, use your Gmail address and password to your Gmail account.
You should Allow less secure apps in your account settings. Please note that it may take an hour or two for this setting to come into effect. In some cases, you might additionally need to make necessary changes on the unlock CAPTCHA page.
If something goes wrong, you will receive an error “5.7.14 Please log in via your web browser and then try again” or “Username and Password not accepted”. It should contain instructions on how to fix it.
2-Step Verification
If 2-step verification is enabled for your Gmail account and you wish to use it with PHPMailer as well, you will need to create an App password to continue. It is a 16-digit passcode, which you should put as a value to $mail->Password. It is easy to generate one following these Google instructions.
XOAuth2
OAuth2 is the most complicated but still the recommended method. Fortunately, there is oauth2-google. It is a package to support Google OAuth 2.0 for the PHP League’s OAuth 2.0 Client. It supports PHP 7.0 – PHP 7.3. To use it, you need to get a Google client ID and client secret first. Follow to set everything up. Once completed, install the package with composer and add the authorization details as below:
For more details, follow the oauth2-google on GitHub.
Грамотное использование русских символов в заголовках почтового сообщения
Итак, в явном виде русский текст в заголовке присутствовать не должен, поэтому для того чтобы включить его туда, этот текст предварительно нужно закодировать. Стандарты описывают способ кодирования «запрещенных» символов. Общий формат выглядит так:
Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».
Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).
К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:
Здесь предполагается, что в переменной у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.
Описание
bool mail (string to, string subject, string message ])
Могут помочь и следующие RFC-документы: RFC 1896,
RFC 2045,
RFC 2046,
RFC 2047,
RFC 2048 и
RFC 2049.
mail() возвращает TRUE, если почта была успешно принята для доставки, FALSE в ином случае.
Важно! Обратите внимание, успешно принято для доставки не подразумевает, что почта фактически достигнет предназначенного назначения
Предупреждение! |
---|
Windows-реализация mail() во многом отличается от Unix-реализации. Во-первых, она не использует |
Пример 1. Отправка почты.
|
Если передаётся четвёртый строковой аргумент, эта строка вставляется в
конце шапки/header. Обычно это используют для добавления дополнительных
шапок. Несколько дополнительных шапок разделяются символами carriage return и newline.
Пример 2. отправка почты с дополнительными шапками/header.
|
Параметр additional_parameters можно использовать для передачи дополнительных параметров программе,
сконфигурированной для использования при отправке почты установкой конфигурации sendmail_path. Например, это можно применять для установки адреса отправителя при
использовании sendmail. Вам может понадобиться добавить пользователя под
которым работает ваш web-сервер, в вашу sendmail-конфигурацию для
предотвращения добавления шапки ‘X-Warning!’ к сообщению, когда вы
устанавливаете отправителя с использованием этого метода.
Пример 3. Отправка почты с дополнительными шапками/headers и установка
|
/* получатели */
$to= «Mary »
«, » ; //обратите внимание на запятую
$to .= «Kelly «;
/* тема/subject */
$subject = «Birthday Reminders for August»;
/* сообщение */
$message = ‘
Birthday Reminders for August
Here are the birthdays upcoming in August!
Person | Day | Month | Year |
---|---|---|---|
Joe | 3rd | August | 1970 |
Sally | 17th | August | 1973 |
‘;
/* Для отправки HTML-почты вы можете установить шапку Content-type. */
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»;
/* дополнительные шапки */
$headers .= «From: Birthday Reminder \r\n»;
$headers .= «Cc: birthdayarchive@example.com\r\n»;
$headers .= «Bcc: birthdaycheck@example.com\r\n»;
/* и теперь отправим из */
mail($to, $subject, $message, $headers);
Debugging
Enable SMTP debugging and set the debug level in your script as follows:
- level 1 = client; will show you messages sent by the client
- level 2 = client and server; will add server messages, it’s the recommended setting.
- level 3 = client, server, and connection; will add information about the initial information, might be useful for discovering STARTTLS failures
- level 4 = low-level information.
Use level 3 or level 4 if you are not able to connect at all. Setting level 0 will turn the debugging off, it is usually used for production.
For a better understanding of how debugging in PHPMailer works, let’s review a couple of examples.
Example1. Invalid SMTP hostname
For this example, we entered an invalid hostname: mailtrap.io instead of smtp.mailtrap.io. and instantly received a message that an error has occurred at the very first stage of communication with the server.
Example 2. Invalid credentials
This example demonstrates where the error occurs: now the SMTP, its hostname, and port are valid but a combination of login and password was not found, so you should double-check and modify your credentials.
There are a couple of detailed articles on GitHub about debugging and troubleshooting, refer to them when you need to dive deeper into these topics.
History
- PHPMailer was originally written in 2001 by Brent R. Matzelle as a SourceForge project.
- Marcus Bointon ( on SF) and Andy Prevost () took over the project in 2004.
- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski.
- Marcus created his fork on GitHub in 2008.
- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013.
- PHPMailer moves to the PHPMailer organisation on GitHub in 2013.
What’s changed since moving from SourceForge?
- Official successor to the SourceForge and Google Code projects.
- Test suite.
- Continuous integration with Github Actions.
- Composer support.
- Public development.
- Additional languages and language strings.
- CRAM-MD5 authentication support.
- Preserves full repo history of authors, commits and branches from the original SourceForge project.
Отправка подписанного и зашифрованного письма через PHPMailer
По-умолчанию, PHPMailer шифрует все отправляемые письма. Отключить шифрование письма можно только при отправке писем через SMTP использовав код:
$mail->SMTPSecure = false; $mail->SMTPAutoTLS = false;
Чтобы подписать письмо подписью DKIM, необходимо выполнить несколько действий:
- Сгенерировать приватный (private) и публичный (public) ключи для вашего домена
- Добавить DNS-запись для домена типа TXT с публичным ключом
- Настроить DKIM подпись в PHPMailer перед отправкой письма
Теперь опишу каждый шаг немного подробнее.
Генерация приватного и публичного ключей
Если у вас Linux-хостинг и есть доступ в Shell, то сгенерировать файлы ключей проще простого, нужно выполнить всего 2 команды с обычными правами своего пользователя:
openssl genrsa -out test-private.pem 1024 openssl rsa -in test-private.pem -out test-public.pem -pubout
Соответственно, test-private.pem и test-public.pem — это приватный и публичный ключи. Сохранить их нужно в папке, которая будет не доступна посетителям сайта или кому-то еще кроме вас.
Если нет возможности выполнить команды в shell, тогда чтобы сгенерировать приватный (private) и публичный (public) ключи и сохранить их в файлы, можно воспользоваться следующим кодом:
$domain = 'test.ru'; // ваш домен $privatekeyfile = 'test-private.pem'; // имя файла, в который будет записан приватный ключ $publickeyfile = 'test-public.pem'; // имя файла, в который будет записан публичный ключ if (file_exists($privatekeyfile)) { echo "<p>Using existing keys</p>"; $privatekey = file_get_contents($privatekeyfile); $publickey = file_get_contents($publickeyfile); } else { echo "<p>Create keys</b>"; $pk = openssl_pkey_new( ); openssl_pkey_export_to_file($pk, $privatekeyfile); $pubKey = openssl_pkey_get_details($pk); $publickey = $pubKey; file_put_contents($publickeyfile, $publickey); $privatekey = file_get_contents($privatekeyfile); } echo "<p>Private key (keep this private!):</p><pre>" . $privatekey . "</pre>"; echo "<p>Public key:</p><pre>" . $publickey . "</pre>";
Внимание! Не забудьте убедиться, что папка, в которую будут сохраняться файлы, доступна для записи
Добавление DNS-записи с публичным ключом
DNS-запись нужна, чтобы почтовые серверы, которые будут получать ваши письма, смогли проверить подпись на письме, прочитав DNS-запись вашего домена. Как правило, DNS-запись можно добавить в панели управления вашим доменом, либо в панели управления хостингом. Если не знаете, как добавить запись, обратитесь в поддержку вашего хостинг-провайдера.
Нужно добавить DNS-запись следующего вида:
Имя записи: mail._domainkey.test.ru. (в конце точка «.»)
TTL: 3600 (или какое будет по-умолчанию)
Тип записи: TXT
Значение: v=DKIM1; h=sha256; t=s; p=ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ
В имени записи test.ru нужно заменить на имя вашего домена. Слова «ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ» вы заменяете на текст, который вы получили на предыдущем шаге после «Public key», без «——BEGIN PUBLIC KEY——» и «——END PUBLIC KEY——«, только сам ключ. При этом все строчки ключа нужно соединить в одну длинную строку, чтобы переводов строки не было.
Настройка подписи DKIM в PHPMailer и отправка письма
Теперь осталось лишь сделать несколько настроек PHPMailer перед отправкой письма и оно будет подписано. Думаю, на приведенном примере будет всё понятно:
// Подключаем библиотеку use PHPMailer\PHPMailer\PHPMailer; require 'PHPMailer/PHPMailer.php'; // Создаем письмо $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; $mail->setFrom('test@test.ru'); $mail->addAddress('test@ya.ru'); $mail->Subject = 'Это тест'; $mail->msgHTML('<p>Это тест</p>'); // Настройка DKIM подписи $mail->DKIM_domain = 'test.ru'; $mail->DKIM_private = 'test-private.pem'; $mail->DKIM_selector = 'mail'; // Отправляем $mail->send();
Разумеется, test.ru вы должны поменять на имя своего домена, а test-private.pem на полный путь и имя файла приватного ключа, который был создан на этапе генерации ключей.
Теперь, ваши письма, отправляемые через PHPMailer будут подписаны подписью DKIM вашим приватным ключом.
Дополнения
19.10.2014 Иван Ткаченко подсказал, что можно расширить возможности класса и отправлять письмо сразу нескольким получателям, за это ему большое спасибо!
Для отправки нескольким получателям через «,» заменить
Это:
fputs($socket, "RCPT TO: \r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: RCPT TO'); }
На это:
$email_to_array = explode(',', $mailTo); foreach($email_to_array as $key => $email) { $emails = ltrim($email, ''); fputs($socket, "RCPT TO: <$emails>\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: RCPT TO'); } }
05.08.2016 Сегодня в комментарии подсказали по поводу проблемы с кодировкой, спасибо за это Евгению:
«Для тех у кого в теле и сабже полученного письма кракозябры — проверьте кодировку сервера по умолчанию и кодировку в которой написан сам скрипт. У меня windows-1251 так что прежде чем вызывать метод send использую»
$from_user=iconv("windows-1251", "utf-8" ,$from_user); $subject =iconv("windows-1251", "utf-8" , $subject); $message =iconv("windows-1251", "utf-8" , $message);
22.11.2016 Сегодня в комментарий добавили полезный код, который позволяет отправлять, с помощью класса, не только текст, но и файлы. Спасибо большое, за этот код Анжелике. Ниже код:
можно отправлять не только одно письмо но и файлы прикреплять к письму: // пример использования require_once «SendMailSmtpClass.php»; // подключаем класс $mailSMTP = new SendMailSmtpClass(‘xxx@mail.ru’, ‘xxx’, ‘ssl://smtp.mail.ru’, ‘NameSender’, 465); // создаем экземпляр класса // $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’); // заголовок письма $headers= «MIME-Version: 1.0\r\n»; //$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма //$headers .= «From: Anjelika \r\n»; // от кого письмо !!! тут e-mail, через который происходит авторизация $subject = «пробуем отправить файл»; $message =»Сообщение в теле письма при отправке файла»; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = «имя файла например формата.zip»; // название файла $filepath = «./sending/полный путь к файлу.zip»; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = «—-«.md5(uniqid(time())); // генерируем разделитель $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»\r\n»; // кодировка письма// разделитель указывается в заголовке в параметре boundary $headers .= «From: NameSender \r\n»; $multipart = «—$boundary\r\n»; $multipart .= «Content-Type: text/html; charset=utf-8\r\n»; $multipart .= «Content-Transfer-Encoding: base64\r\n»; $multipart .= «\r\n»; $multipart .= chunk_split(base64_encode(iconv(«utf8», «windows-1251″, $message))); // первая часть само сообщение // Открыли файл $fp = fopen($filepath,»r»); if (!$fp) { print «Не удается открыть файл22»; exit(); } $file = fread($fp, filesize($filepath)); // чтение файла fclose($fp); $message_part = «\r\n—$boundary\r\n»; $message_part .= «Content-Type: application/zip; name=\»$filename\»\r\n»; $message_part .= «Content-Disposition: attachment\r\n»; $message_part .= «Content-Transfer-Encoding: base64\r\n»; $message_part .= «\r\n»; $message_part .= chunk_split(base64_encode($file)); $message_part .= «\r\n—$boundary—\r\n»; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; $result = $mailSMTP->send(‘xxx@xxx.ru’, $subject, $multipart, $headers); // отправляем письмо // $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’); if($result === true){ echo «Письмо успешно отправлено»; }else{ echo «Письмо не отправлено. Ошибка: » . $result; }
Contributing
Please submit bug reports, suggestions and pull requests to the GitHub issue tracker.
We’re particularly interested in fixing edge-cases, expanding test coverage and updating translations.
If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it.
If you have git clones from prior to the move to the PHPMailer GitHub organisation, you’ll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Please don’t use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.
Отправка письма с вложением с помощью PHPMailer
Здесь всё довольно просто, нужно лишь использовать метод addAttachment. Приведу пример, заодно продемонстрировав еще несколько дополнительных возможностей:
// Подключаем библиотеку PHPMailer use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'PHPMailer/PHPMailer.php'; require 'PHPMailer/Exception.php'; // Создаем письмо $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; $mail->setFrom('test@test.ru', 'Иван Иванов'); // от кого $mail->addReplyTo('test@test.ru', 'Иван Иванов'); // обратный адрес $mail->addAddress('test@ya.ru', 'Вася Петров'); // кому $mail->Subject = 'Тест'; // тема $mail->msgHTML(file_get_contents('contents.html'), __DIR__); // получаем "тело" письма из файла $mail->AltBody = 'Письмо обычным текстом'; // письмо обычным текстом, если клиент не поддерживает html $mail->addAttachment('my_file.txt'); // прикрепляем один файл $mail->addAttachment('phpmailer.jpg'); // прикрепляем второй файл // Отправляем if ($mail->send()) { echo 'Письмо отправлено!'; } else { echo 'Ошибка: ' . $mail->ErrorInfo; }
Адресов получателей можно добавить несколько с помощью addAddress. Или, если необходимо, можно наоборот, очистить все адреса получателей методом clearAddresses(). Очистить все вложения можно с помощью clearAttachments().
Так же можно использовать AddEmbeddedImage чтобы добавить в письмо вложение (обычно изображения), которое предназначено для использования в html-коде и не будет доступно для скачивания. Пример использования картинки в письме, не доступной для скачивания:
// Подключаем библиотеку PHPMailer use PHPMailer\PHPMailer\PHPMailer; require 'PHPMailer/PHPMailer.php'; //Создаем письмо $mail = new PHPMailer; $mail->IsHTML(true); $mail->setFrom('test@test.ru', 'Иван Иванов'); $mail->addAddress('test@ya.ru', 'Вася Петров'); $mail->Subject = 'Test'; $mail->AddEmbeddedImage('phpmailer.jpg','testImage'); $mail->Body = '<p>Изображение в html-коде <img src="cid:testImage"></p>'; // Отправляем $mail->send();
Таким образом, вы можете отправлять письма с изображениями, которые есть только в теле письма, но их нельзя скачать как вложение. Эти изображения можно использовать в любом месте html-кода письма, нужно лишь указывать вместо url-адреса cid изображения, который вы использовали в AddEmbeddedImage.
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method=»post». Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров — функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ «<» в ‘<’. Также он поступить с другими символами, встречающимися в html коде.
Вторая функция декодирует url, если пользователь попытается его добавить в форму.
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
Вторая строка здесь нужна для того, чтобы разделить вывод переменных 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».
Installation & loading
PHPMailer is available on Packagist (using semantic versioning), and installation via Composer is the recommended way to install PHPMailer. Just add this line to your file:
"phpmailer/phpmailer": "^6.2"
or run
composer require phpmailer/phpmailer
Note that the folder and the script are generated by Composer; they are not part of PHPMailer.
If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the package in your .
Alternatively, if you’re not using Composer, you
can download PHPMailer as a zip file, (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the directories specified in your PHP configuration and load each class file manually:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'path/to/PHPMailer/src/Exception.php'; require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php';
If you’re not using the class explicitly (you’re probably not), you don’t need a line for the SMTP class. Even if you’re not using exceptions, you do still need to load the class as it is used internally.
Other upgrade changes
See the changelog for full details.
- File structure simplified, classes live in the folder
- Most statically called functions now use the keyword instead of , so it’s possible to override static internal functions in subclasses, for example
- Complete RFC standardisation on CRLF () line breaks by default:
- still exists, but all uses of it are changed to for easier overriding. It may be changed to automatically when sending via on UNIX-like OSs
- line ending constant removed
- The length of the line break is no longer used in line length calculations
- Similar changes to line break handling in SMTP and POP3 classes
- All elements previously marked as deprecated have been removed:
- NTLM authentication has been removed — it never worked anyway!
- method signature changed
- is now static
- is now called statically from
- is now static and is called statically from
- is now protected
Лирическое отступление
Прежде чем двигаться дальше, давайте немного вспомним теорию. Во-первых, чтобы отправлять письма нам потребуется SMTP-сервер. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. Во-вторых, для приёма писем нам понадобится POP-сервер. В-третьих, следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). В-четвёртых, все сообщения помещаются в директорию под названием «tmp/!sendmail».
Why/When to use the mail PHP
Sending mail using PHP
The PHP mail function has the following basic syntax
<?php mail($to_email_address,$subject,$message,,); ?>
HERE,
- “$to_email_address” is the email address of the mail recipient
- “$subject” is the email subject
- “$message” is the message to be sent.
- “” is optional, it can be used to include information such as CC, BCC
- CC is the acronym for carbon copy. It’s used when you want to send a copy to an interested person i.e. a complaint email sent to a company can also be sent as CC to the complaints board.
- BCC is the acronym for blind carbon copy. It is similar to CC. The email addresses included in the BCC section will not be shown to the other recipients.
Documentation
Start reading at the GitHub wiki. If you’re having trouble, head for the troubleshooting guide as it’s frequently updated.
Examples of how to use PHPMailer for common scenarios can be found in the examples folder. If you’re looking for a good starting point, we recommend you start with the Gmail example.
To reduce PHPMailer’s deployed code footprint, examples are not included if you load PHPMailer via Composer or via GitHub’s zip file download, so you’ll need to either clone the git repository or use the above links to get to the examples directly.
Complete generated API documentation is available online.
You can generate complete API-level documentation by running in the top-level folder, and documentation will appear in the folder, though you’ll need to have PHPDocumentor installed. You may find the unit tests a good reference for how to do various operations such as encryption.
If the documentation doesn’t cover what you need, search the many questions on Stack Overflow, and before you ask a question about «SMTP Error: Could not connect to SMTP host.», read the troubleshooting guide.
Loading PHPMailer
The single biggest change will be in the way that you load PHPMailer. In earlier versions you may have done this:
require 'PHPMailerAutoload.php';
or
require 'class.phpmailer.php'; require 'class.smtp.php';
We recommend that you load PHPMailer via composer, using its standard autoloader, which you probably won’t need to load if you’re using it already, but in case you’re not, you will need to do this instead:
require 'vendor/autoload.php';
If you’re not using composer, you can still load the classes manually, depending on what you’re using:
require 'src/PHPMailer.php'; require 'src/SMTP.php'; require 'src/Exception.php';
Localization
PHPMailer defaults to English, but in the language folder you’ll find many translations for PHPMailer error messages that you may encounter. Their filenames contain ISO 639-1 language code for the translations, for example for French. To specify a language, you need to tell PHPMailer which one to use, like this:
// To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/');
We welcome corrections and new languages – if you’re looking for corrections to do, run the PHPMailerLangTest.php script in the tests folder and it will show any missing translations.
Установка и настройка почтового сервера
Установка Postfix
apt-get update && apt-get install postfix
В процессе установки будут заданы вопросы относительно настройки
Важно выбрать тип Internet Site. Это необходимо сделать для того, чтобы Postfix сгенерировал файл и сразу начал работу
В противном случае, Вам необходимо будет настраивать его вручную.
Установка Sendmail
Sendmail устанавливается примерно так же
apt-get update && apt-get install sendmail
Потом его сконфигурировать
sendmailconfig
После всего этого перезагрузить сервер
reboot
Что делать, если email не доходит
- Проверить правильность адреса, куда почта должна придти;
- Проверить папку Спам;
- Выждать пару минут.
Если по истечению времени письмо таки не дошло в почтовый ящик, хотя плагин просигнализировал об успешной отправке сообщения, возможно, хостинг не настроен должным образом.
Возможно, php просто не может отправлять письма.
Как проверить отправку email в PHP
3 команды, которые нужно ввести в консоль SSH последовательно:
php -a mail ('', "Test Mailer", "Test mail from php mailer"); exit;
- Создать файл ;
- Прописать туда:
<?php mail ('', "Test Mailer", "Test mail from php mailer");
- Запустить файл командой
php -f test_email.php
Если на данном этапе возникает ошибка, попробуйте переустановить и правильно сконфигурировать Postfix или Sendmail.