Отправка электронных писем с помощью библиотеки PHPMailer языка PHP
Функционала mail() достаточно для выполнения большинства стандартных задач, связанных с отправкой электронных писем, но зачастую она не обеспечивает требуемую гибкость.
Для работы mail() требуется сконфигурированный локальный сервер, в то время как PHPMailer поддерживает протокол SMTP, который могут использовать аутентифицированные пользователи.
Рассмотрим ещё несколько преимуществ использования PHPMailer:
К слову, PHPMailer используют многие CMS, созданные на языке PHP: например, WordPress, Joomla! и Drupal.
Установка библиотеки PHPMailer
Для установки PHPMailer можно использовать менеджер пакетов (композер), выполнив следующую команду:
composer require phpmailer/phpmailer
Отправка электронных писем с локального сервера с помощью PHPMailer
Ниже представлен простой код для отправки электронного письма с локального сервера через библиотеку PHPMailer:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//From email address and name
$mail->From = «from@yourdomain.com»;
$mail->FromName = «Full Name»;
//To address and name
$mail->addAddress(«recepient1@example.com», «Recepient Name»);
$mail->addAddress(«recepient1@example.com»); //Recipient name is optional
//Address to which recipient will reply
$mail->addReplyTo(«reply@yourdomain.com», «Reply»);
//CC and BCC
$mail->addCC(«cc@example.com»);
$mail->addBCC(«bcc@example.com»);
//Send HTML or Plain Text email
$mail->isHTML(true);
$mail->Subject = «Subject Text»;
$mail->Body = «Mail body in HTML«;
$mail->AltBody = «This is the plain text version of the email content»;
Представленный код с комментариями наглядно демонстрирует все действия, которые нужно выполнить для отправки письма.
Отправка письма с вложениями
В приведённом ниже коде показано, как отправить письмо с вложениями с помощью PHPMailer:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer;
$mail->From = «from@yourdomain.com»;
$mail->FromName = «Full Name»;
$mail->addAddress(«recipient1@example.com», «Recipient Name»);
//Provide file path and name of the attachments
$mail->addAttachment(«file.txt», «File.txt»);
$mail->addAttachment(«images/profile.png»); //Filename is optional
$mail->Subject = «Subject Text»;
$mail->Body = «Mail body in HTML«;
$mail->AltBody = «This is the plain text version of the email content»;
Чтобы прикрепить файлы к письму, необходимо вызвать метод addAttachment объекта PHPMailer, который в качестве аргумента принимает строку с адресом файла. Для прикрепления нескольких файлов нужно вызвать этот метод соответствующее число раз.
Устранение проблем в коде
В зависимости от типа системы, наиболее распространенной ошибкой при использовании встроенной функции mail() в фоновом режиме является следующая:
Mailer Error: Could not instantiate mail function.
Если нужно получить больше сведений о возникшей ошибке, можно добавить следующий код в блок catch<> :
Как правило, ошибки использования функции mail() связаны с тем, что почтовый сервер не был сконфигурирован. В этом случае функция error_get_last вернёт следующее:
Array (
⠀⠀⠀⠀ [type] => 2
⠀⠀⠀⠀ [message] => mail(): Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set()
⠀⠀⠀⠀ [file] => OUR_PATH \vendor\phpmailer\phpmailer\src\PHPMailer.php
⠀⠀⠀⠀ [line] => 863
`)
Чтобы избежать этой весьма распространённой проблемы, рекомендуется использовать протокол SMTP.
Отображение сообщений об ошибках на требуемом языке
В папку language также можно добавить любой другой язык из 43 доступных.
Использование протокола SMTP
Для отправки электронных писем можно использовать почтовый сервер другого хоста, но сперва необходимо пройти аутентификацию. То есть для отправки писем через почтовый сервер Gmail необходимо иметь учётную запись в этом сервисе.
SMTP – протокол запроса на отправку электронного письма, используемый почтовыми клиентами. После того, как почтовый сервер проверит электронное письмо, он отправит его на указанный почтовый сервер.
Ниже приведен пример отправки письма через почтовый сервер Gmail с клиентского домена. Поскольку мы используем SMTP-протокол, локальный почтовый сервер не требуется:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
$mail = new PHPMailer(true);
//Enable SMTP debugging.
$mail->SMTPDebug = 3;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = «smtp.gmail.com»;
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = «name@gmail.com»;
$mail->Password = «super_secret_password»;
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = «tls»;
//Set TCP port to connect to
$mail->Port = 587;
$mail->From = «name@gmail.com»;
$mail->FromName = «Full Name»;
$mail->addAddress(«name@example.com», «Recepient Name»);
$mail->Subject = «Subject Text»;
$mail->Body = «Mail body in HTML«;
$mail->AltBody = «This is the plain text version of the email content»;
Сервер Gmail использует TSL-шифрование поверх SMTP, поэтому в коде было установлено соответствующее значение для свойства объекта PHPMailer. Перед отправкой по протоколу SMTP необходимо указать имя хоста, номер порта, тип шифрования и пройти аутентификацию, а также предоставить имя пользователя и пароль. Если в Gmail была включена функция двухфакторной аутентификации, доступ к SMTP через имя пользователя и пароль будет закрыт. Для получения доступа необходимо внести дополнительные настройки.
Извлечение писем через протокол POP3
Библиотека PHPMailer поддерживает отправку писем по методу аутентификации POP перед SMTP. Иначе говоря, вы сможете пройти аутентификацию через POP и отправлять почту через SMTP. К сожалению, в PHPMailer реализована только возможность отправки электронных писем, поэтому получать почту по протоколу POP3 с использованием библиотеки не получится.
Заключение
Если вы являетесь PHP-разработчиком, вы будете часто сталкиваться с необходимостью программной отправки электронных писем. Конечно, можно использовать сторонние сервисы (Mandrill или SendGrid) или написать свою собственную библиотеку, но лучшим инструментом для решения этой задачи пока по-прежнему остаётся PHPMailer.
Как использовать ссылки mailto: и tel:
Ссылки tel: нужны, чтобы сделать кликабельным номер телефона на сайте, а через mailto: можно отправить целое письмо, в котором сразу будут заполнены и адрес, и тема, и даже какой-нибудь текст. Иногда это удобно — пользователю не нужно набирать номер телефона вручную, а письмо в службу поддержки можно начать сразу с конкретной темы.
Такие форматы ссылок поддерживаются всеми браузерами, так что вы можете по необходимости использовать их в своих проектах не переживая, что где-то они не сработают.
mailto:
Ссылка формируется из нескольких частей. Сначала в адресе ставится префикс mailto:, после которого указывается адрес почты. Это самый простой вариант.
Текст письма указывается с помощью параметра body
Что произойдёт, если кликнуть на ссылку с mailto
Откроется почтовая программа, в которой уже будут заполнены все нужные поля. Например, так ссылку выше обработает программа «Почта» в OS X:
Если почтовая программа по умолчанию не установлена, появится окно выбора программы.
Обратите внимание, что адреса с нестандартными символами, например, кавычками или дополнительными знаками @, нужно записывать особым образом. Подробнее об этом и других сложных случаях читайте в RFC 6068.
Как стилизовать mailto
Для стилизации ссылки на электронную почту можно воспользоваться CSS-селектором a[href^=»mailto:»].
Хорошим тоном считается указание в href кода страны. При этом в тексте ссылки номер может быть указан в любом удобном формате. Например, добавляем городской номер на сайте фирмы из Санкт-Петербурга:
В href указан номер с кодом страны и города, в тексте ссылки есть код города 812, по которому понятно, что речь о Питере.
В этом случае жители всех городов смогут дозвониться до компании, а короткий номер будет понятен и местным. Случай перейдёт в категорию «плохо», если по сайту непонятно, из какого города компания.
Телефоны с питерскими сим-картами дозвонятся по этому городскому номеру, но жители других городов попадут куда-то ещё.
Номер видно в тексте ссылки.
Номер не видно в тексте ссылки, непредсказуемое поведение.
Что произойдёт, если кликнуть на ссылку с tel
На смартфоне откроется приложение-звонилка, в котором будет набран указанный в ссылке номер. Если открыть такую ссылку на компьютере, где есть программа для звонков, произойдёт то же самое. Но вообще то, что произойдет, сильно зависит от устройства и операционной системы, браузера и устройства.
Например, Chrome на OS X предложить открыть FaceTime для звонка, так как эта программа установлена по умолчанию. Вместо неё легко может быть Skype или любая другая звонилка.
Windows на ноутбуке предложит выбрать, с помощью какой программы открывать ссылки tel:
Как стилизовать
А так можно добавить иконку телефона из Unicode, которая есть во всех системах:
mailto link with HTML body
I have a couple of mailto links in a HTML document.
Note that (2016) in iOS, it is perfectly fine to add and tags for simple italic, bold formatting.
9 Answers 9
As you can see in RFC 6068, this is not possible at all:
The special «body» indicates that the associated is the body of the message. The «body» field value is intended to contain the content for the first text/plain body part of the message. The «body» pseudo header field is primarily intended for the generation of short text messages for automatic processing (such as «subscribe» messages for mailing lists), not for general MIME bodies.
Whilst it is NOT possible to use HTML to format your email body you can add line breaks as has been previously suggested.
If you are able to use javascript then «encodeURIComponent()» might be of use like below.
No. This is not possible at all.
I have used this and it seems to work with outlook, not using html but you can format the text with line breaks at least when the body is added as output.
It’s not quite what you want, but it’s possible using modern javascript to create an EML file on the client and stream that to the user’s file system, which should open a rich email containing HTML in their mail program, such as Outlook:
Here’s a jsfiddle of an email containing images and tables: https://jsfiddle.net/seanodotcom/yd1n8Lfh/
Some things are possible, but not all, say for example you want line breaks, instead of using
use %0D%0A
As other responses have noted, you should also use encodeURIComponent on the entire body before embedding it in the mailto: link.
Anybody can try the following (mailto function only accepts plaintext but here i show how to use HTML innertext properties and how to add an anchor as mailto body params):
MySlimBody.ru – как отменить подписку и вернуть деньги, отзывы
С автоматическими списаниями в пользу онлайн-платформы MySlimBody.ru сталкиваются владельцы пластиковых карт разных банков. Сервис снимает деньги за доступ к архиву видео тренировок, позволяющих заниматься спортом в домашних условиях. Отменить подписку можно несколькими способами.
Почему MySlimBody.ru списывает с карты денежные средства
Автоматический платеж Myslimbody ru Sankt Peterb RUS связан с оплатой подписки на сайт www.myslimbody.ru. Онлайн-сервис рассчитан на людей, желающих заниматься физической активностью в домашних условиях. Ресурс предлагает платный доступ к видеокурсу, который включает в себя подборку упражнений, комплекс тренировок и консультацию профессиональных тренеров. Пользователь может выбрать один из трех тарифных планов стоимостью от 980 рублей в неделю до 9990 за двенадцать месяцев.
Сервис MySlimBody завлекает клиентов предложением оформить пробный доступ на 3 дня за 1 рубль. Для оплаты символической суммы необходимо создать новый профиль на сайте myslimbody.ru и привязать банковскую карту к платежной системе CloudPayments. Через нее снимаются деньги за оплату следующих расчетных периодов рекуррентным способом (не требующим подтверждений от держателя карты). Информация о безакцептных списаниях есть в тексте оферты, однако большинство пользователей соглашается с условиями, не ознакомившись с договором.
Как отменить подписку
Отписаться от платных услуг MySlimBody.ru можно, отправив письмо на e-mail support@myslimbody.ru. Помимо требования отменить подписку, в нем должны содержаться следующие данные: электронная почта, частичный номер банковской карты и идентификатор. Существуют и другие способы отказа от подписки:
В случае возникновения затруднений с отпиской стоит позвонить на горячую линию Cloud Payments +7-495-374-7860 или написать письмо на электронную почту sales@cloudpayments.ru.
Можно ли вернуть деньги
Вернуть деньги, списанные в пользу MySlimBody, можно, но сделать это будет довольно сложно. В договоре, который находится по ссылке www.myslimbody.ru/about/oferta/, указаны условия возврата денежных средств. Потребуется предоставить веские доказательства того, что услуги были предоставлены некачественно. Алгоритм возврата денег выглядит следующим образом:
Если сервис сочтет аргументацию весомой, он вернет деньги в течение 14 рабочих дней. Чаще всего администрация отказывает в подобных запросах, поскольку ссылка на условия договора находится на главной странице сайта.
Многие банки предоставляют услугу «возвратный платеж» в случаях, если списание денег было осуществлено с нарушением законодательства. Оспорить транзакцию можно, обратившись в свой банк и подав заявление на активацию процедуры chargeback. Причиной запроса необходимо указать «Нарушение закона о рекламе».
Отзывы
MySlimBody пытались списать с моей карты 980 рублей через несколько дней после того, как я перешла по ссылке из ВК и зарегистрировалась на их сайте. Пришлось блокировать карту. На YouTube можно без труда найти контент на уровень выше, при этом абсолютно бесплатный. Восторженные отзывы на главной странице точно подставные. В общем, не рекомендую связываться с этим сервисом.
Differences Between the Email Body and the Header
Each part of an email message has a specific function
An email message has two parts: the body and the header. Learning the difference between the body of the email and the header can help you manage each of them better.
What Is the Difference Between an Email Header and Email Body?
When you think of traditional mail, the two parts are easy to see. With paper mail, there’s the envelope with the address, stamp, and postal information on it, and the letter or other paperwork inside.
With email, it’s similar. There are also two distinct parts that make up a single email message. There is the header with control information and other data, and the body of the message which includes the sender’s text, as well as attachments and other components.
The Email Header Section
The header section of an email message acts like the envelope of a written letter. This section contains information about the sender, the recipient, and the email’s route to get to the recipient’s inbox. It also includes several necessary authentication details. The header always precedes the body of an email.
Only a portion of the header appears in an email message. The rest of the header is hidden. The portions of the header that normally display include the date, sender and recipient information, and subject. Items such as the server path, return path, originating IP address, or spam information aren’t seen in the message. View the full email header to get a better understanding of the journey an email message followed to get to your inbox.
The Email Body Section
The body of an email message is essentially the letter inside of the envelope. Consider how you read a letter you receive in the postal mail. You open the envelope and unfold the paper to view the contents of the message.
Similarly, once a recipient opens an email message, the email body section displays in its entirety. Separate from the header, the body is a freeform field where you insert as much text as you want and add supporting links, images, or attachments (though attachments are usually displayed separately).
When you send an email message, you’re not limited in how much text you can use. However, email servers have limits on how big a message they accept. Common maximum sizes for email bodies, including attachments, are 10 MB to 25 MB.









:max_bytes(150000):strip_icc()/Heinz-Tschabitsche-c6d01096ad5f47b8800846cebc7d99b1.jpg)
:max_bytes(150000):strip_icc()/4CallheadersANNOTATED-6b27f40a12d846e9a70529e1b392e343.jpg)



