Web-разработка • Yii2 и Laravel
Отправку почты рассмотрим на примере формы обратной связи с полями «Имя», «Почта» и «Сообщение». Нам потребуется создать контроллер, который будет показывать фому и обрабатывать POST-запрос от клиента. Потом добавим два роута и создам шаблон с формой. После этого нам потребуется создать класс FeedbackMailer
, расширяющий Illuminate\Mail\Mailable
и покопаться в настройках Laravel.
Форма обратной связи
Создаем контроллер FeedbackController
:
> php artisan make:controller FeedbackController
namespace App\Http\Controllers; use stdClass; use App\Mail\FeedbackMailer; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; class FeedbackController extends Controller { public function index() { return view('feedback.index'); } public function send(Request $request) { $request->validate([ 'name' => 'required|max:100', 'email' => 'required|email|max:100', 'message' => 'required|max:500', ]); $data = new stdClass(); $data->name = $request->name; $data->email = $request->email; $data->message = $request->message; Mail::to($data->email)->send(new FeedbackMailer($data)); return redirect()->route('feedback.index') ->with('success', 'Ваше сообщение успешно отправлено'); } }
Добавляем два маршрута в файл routes/web.php
:
Route::get('/feedback', 'FeedbackController@index')->name('feedback.index'); Route::post('/feedback', 'FeedbackController@send')->name('feedback.send');
Создаем шаблон resources/views/feedback/index.blade.php
:
@extends('layouts.app') @section('content') <h2>Обратная связь</h2> @if (session('success')) <div role="alert"> {{ session('success') }} </div> @endif @if ($errors->any()) <div role="alert"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="post" action="{{ route('feedback.send') }}"> @csrf <div> <input type="text" name="name" placeholder="Имя, фамилия" required maxlength="100" value="{{ old('name') ?? '' }}"> </div> <div> <input type="email" name="email" placeholder="Адрес почты" required maxlength="100" value="{{ old('email') ?? '' }}"> </div> <div> <textarea name="message" placeholder="Ваше сообщение" required maxlength="500" rows="3">{{ old('message') ?? '' }}</textarea> </div> <div> <button type="submit">Отправить</button> </div> </form> @endsection
Класс отправки почты
В Laravel каждый тип почтового сообщения (обратная связь, заказ в магазине), отправляемых приложением, представлен классом Mailable
. Эти классы хранятся в директории app/Mail
, которая будет создана при создании первого такого класса.
> php artisan make:mail FeedbackMailer
namespace App\Mail; use stdClass; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class FeedbackMailer extends Mailable { use Queueable, SerializesModels; private $data; /** * Create a new message instance. * * @return void */ public function __construct(stdClass $data) { $this->data = $data; } /** * Build the message. * * @return $this */ public function build() { return $this->from('[email protected]', 'ООО ТД АВРОРА') ->subject('Форма обратной связи') ->view('email.feedback', ['data' => $this->data]); } }
Чтобы не указывать заголовок письма From
(от кого), можно задать это в файле .
:
APP_NAME="ООО ТД АВРОРА" [email protected] MAIL_FROM_NAME="${APP_NAME}"
Эти три значения используются далее в файле конфигурации отправки почты config/mail.php
:
return [ /* ... */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', '[email protected]'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], /* ... */ ];
class FeedbackMailer extends Mailable { /* ... */ public function build() { return $this->subject('Форма обратной связи')->view('email.feedback', ['data' => $this->data]); } }
Шаблон почтового сообщения
Еще нам потребуется шаблон для письма
:
<h2>Форма обратной связи</h2> <p><strong>Имя:</strong> {{ $data->name }}</p> <p><strong>Почта:</strong> {{ $data->email }}</p> <p><strong>Сообщение:</strong> {{ $data->message }}</p>
Отправка почты в log-файл
Теперь настройки Laravel для отправки писем. Для начала будем записывать письма просто в log-файл, для этого редактируем файл .env
:
MAIL_MAILER=log
Эта настройка используется в файле конфигурации
, где можно задать, с помощью какого mailer
-а будут отправляться письма:
return [ /* * Default Mailer */ 'default' => env('MAIL_MAILER', 'smtp'), /* * Mailer Configurations */ 'mailers' => [ 'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, ], 'ses' => [ 'transport' => 'ses', ], 'mailgun' => [ 'transport' => 'mailgun', ], 'postmark' => [ 'transport' => 'postmark', ], 'sendmail' => [ 'transport' => 'sendmail', 'path' => '/usr/sbin/sendmail -bs', ], 'log' => [ 'transport' => 'log', 'channel' => env('MAIL_LOG_CHANNEL'), ], 'array' => [ 'transport' => 'array', ], ], /* * Global From: Address */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], /* * Markdown Mail Settings */ 'markdown' => [ 'theme' => 'default', 'paths' => [ resource_path('views/vendor/mail'), ], ], ];
Теперь отправленные письма будут записываться в log-файл, где их можно посмотреть:
Но не очень удобно, что письма записываются в один файл с сообщениями об ошибках. Так что создадим еще одну настройку в файле .env
:
MAIL_LOG_CHANNEL=maillog
И добавим еще один канал (channel) в файле конфигурации логов приложения
:
return [ 'channels' => [ /* ... */ 'maillog' => [ 'driver' => 'single', 'path' => storage_path('mails/laravel.log'), ], ], ];
Теперь письма будут все так же записываться в лог-файл, но в директорию storage/mails
.
Отправка через smtp-сервер
Отправлять будем через smtp-сервер Яндекса, для этого нужно получить пароль приложения здесь:
После этого редактируем файл конфигурации приложения .env
:
APP_NAME="ООО ТД АВРОРА" MAIL_MAILER=smtp MAIL_HOST=smtp.yandex.ru MAIL_PORT=465 [email protected] MAIL_PASSWORD=zsfmsbxwdnbuanjk MAIL_ENCRYPTION=ssl [email protected] MAIL_FROM_NAME="${APP_NAME}"
Файл вложения
Давайте добавим на форму еще одно поле для загрузки изображения и будем это изображение прикреплять к письму:
@extends('layouts.app') @section('content') <h2>Обратная связь</h2> @if (session('success')) <div role="alert"> {{ session('success') }} </div> @endif @if ($errors->any()) <div role="alert"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="post" action="{{ route('feedback.send') }}" enctype="multipart/form-data"> @csrf <div> <input type="text" name="name" placeholder="Имя, фамилия" required maxlength="100" value="{{ old('name') ?? '' }}"> </div> <div> <input type="email" name="email" placeholder="Адрес почты" required maxlength="100" value="{{ old('email') ?? '' }}"> </div> <div> <textarea name="message" placeholder="Ваше сообщение" required maxlength="500" rows="3">{{ old('message') ?? '' }}</textarea> </div> <div> <input type="file" name="image" accept="image/png, image/jpeg"> </div> <div> <button type="submit">Отправить</button> </div> </form> @endsection
namespace App\Http\Controllers; use stdClass; use App\Mail\FeedbackMailer; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; class FeedbackController extends Controller { public function index() { return view('feedback. index'); } public function send(Request $request) { $request->validate([ 'name' => 'required|max:100', 'email' => 'required|email|max:100', 'message' => 'required|max:500', 'image' => 'mimes:jpeg,jpg,png|max:5000', ]); $image = $request->file('image'); if ($image) { // был загружен файл изображения $raw = $image->get(); $ext = $image->extension(); } $data = new stdClass(); $data->name = $request->name; $data->email = $request->email; $data->message = $request->message; $data->image = $raw ?? null; $data->ext = $ext ?? null; Mail::to($data->email)->send(new FeedbackMailer($data)); return redirect()->route('feedback.index') ->with('success', 'Ваше сообщение успешно отправлено'); } }
namespace App\Mail; use Illuminate\Support\Facades\Storage; use stdClass; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class FeedbackMailer extends Mailable { use Queueable, SerializesModels; public $data; public function __construct(stdClass $feedback) { $this->data = $feedback; } public function build() { if ($this->data->image) { $this->attachData($this->data->image, 'image. '.$this->data->ext); } $this->subject('Форма обратной связи') ->view('email.feedback'); } }
Мы получаем из объекта http-запроса сырую строку файла и передаем классу FeedbackMailer
. Но можно еще прикрепить файл из хранилища с помощью методов attachFromStorage()
(используется диск по умолчанию) или attachFromStorageDisk()
(диск надо указать самостоятельно).
class FeedbackController extends Controller { /* ... */ public function send(Request $request) { /* ... */ $image = $request->file('image'); if ($image) { // был загружен файл изображения $path = $image->store('feedback', 'local'); } $data = new stdClass(); /* ... */ $data->image = $path ?? null; Mail::to($data->email)->send(new FeedbackMailer($data)); return redirect()->route('feedback.index') ->with('success', 'Ваше сообщение успешно отправлено'); } }
class FeedbackMailer extends Mailable { /* . .. */ public function build() { if ($this->data->image) { $this->attachFromStorageDisk('local', $this->data->image); } $this->subject('Форма обратной связи') ->view('email.feedback'); } }
Мы сохраняем загруженное изображение в директорию storage/app/feedback
и потом оттуда прикрепляем к письму. Смысла хранить изображение дальше нет, так что его можно удалить. Но сразу удалять нельзя — возникает ошибка, потому что файл удаляется до того, как будет прикреплен к письму. Видимо, нужно добавить обработчик события MessageSent
(возникает после отправки) — и уже там удалить файл с диска.
Вместо заключения
Передать данные в шаблон можно через публичное свойство класса FeedbackMailer
:
class FeedbackMailer extends Mailable { use Queueable, SerializesModels; public $data; public function __construct(stdClass $data) { $this->data = $data; } public function build() { return $this->subject('Форма обратной связи')->view('email. feedback'); } }
Чтобы изменить данные, прежде чем передать их шаблону, свойство должно быть объявлено как protected
или private
:
class FeedbackMailer extends Mailable { use Queueable, SerializesModels; private $data; public function __construct(stdClass $data) { $this->data = $data; } public function build() { return $this->subject('Форма обратной связи') ->view('email.feedback') ->with([ 'name' => $this->data->name, 'email' => $this->data->email, 'message' => $this->data->message, ]);; } }
Метод withSwiftMessage()
класса Mailable
позволяет зарегистрировать анонимную функцию, которая будет вызываться экземпляром сообщения SwiftMailer
перед отправкой сообщения. Это дает возможность кастомизировать сообщение перед тем как оно будет доставлено.
class FeedbackMailer extends Mailable { /* ... */ public function build() { $this->subject('Форма обратной связи') ->view('email.feedback'); $this->withSwiftMessage(function ($message) { $message->getHeaders()->addTextHeader('Custom-Header', 'HeaderValue'); }); } }
Поиск: Laravel • PHP • POST • Web-разработка • Класс • Форма • Фреймворк • Письмо • Mailable • Теория
PHP на IIS отправка электронной почты msmtp
Столкнулся с необходимостью отправки электронной почты из PHP скриптов исполняющихся под Windows IIS. В принципе не такая сложная задача, но она омрачалась тем, что отправка должна осуществляться от имени почтового ящика расположенного на сервере Yandex. Но тут начинаются основные грабли. Не буду описывать, то почему так сложилось, но задача стояла именно так. Следовало отправлять почту используя SMTP сервер Яндекса.
Поискав по сети нашел массу интересной инфы, но применяя на практике программы почему-то не хотели корректно отправлять почту. Их постоянно отшивал сервер Яндекса со следующей мотивировкой:
15.03.02 12:32:07 : Working without SSL/TLS encryption is not allowed. Please visit http://help.yandex.ru/mail/mail-clients/ssl.xml sc=BWCTvUcYASw9
Конечно, по ссылке всё было именно так как я настраивал в программе sendmail.exe. Постепенно обыскивая интернет, я нашел, что для отправки почты Битрикс использует консольный клиент под названием MSMTP. Скачал, попробовал его в работе с почтой Яндекса и пришел к выводу, что это именно то, что мне необходимо.
И так, пара тонкостей которые необходимо учесть. Они были обнаружены не сразу, но это съэкономит вам время на поиски проблемы.
Во-первых, конфигурационный файл для этой программы должен называться msmtprc.txt. Во-вторых, он должен располагаться не рядом с программой, а в каталоге C:ProgramData.
В-третьих, не надо долго настраивать все параметры конфигурационного файла и искать сертификаты ключей, достаточно всего нескольких строчек, что бы заработала почта от Яндекс:
account default logfile C:sendmailmsmtp.log host smtp.yandex.ru port 587 from [email protected] keepbcc on auth on user [email protected] password PassWordDlaPochty123 tls on tls_starttls on tls_certcheck off
Естественно, что имя учётной записи и пароль от учётки необходимо вписать свои. Порт изменять не стоит, там действительно указывается 587.
И так, распаковываем программу на диск, в каталог c:sendmail Создаём конфигурационный файл для программы. За тем нужно отредактировать конфигурационный файл интерпретатора PHP. Он расположен в каталоге в который вы установили PHP.
Отредактируйте секцию mail function следующим образом:
[mail function] ; For Win32 only. ; http://php.net/smtp ;SMTP = localhost ; http://php.net/smtp-port ;smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = [email protected] ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = "c:sendmailmsmtp.exe -t"
Теоретически, после перезапуска интерпретатора, ваша функция отправки почты станет работать. Кстати, н езабывайте о том, что адрес отправителя необходимо указывать свой, соответствующий учетной записи на сервере Яндекс. Если указать другой адрес, то почтовый сервер заблокирует письмо и не отправит его.
Программу можно скачать с сайта MSMTP.
Тэги: ИТ, программирование
Отредактировано:2020-09-10 19:56:20
Как настроить XAMPP для отправки почты с локального хоста с помощью PHP?
PHP, PHP программы, Веб-технологии, Веб-технологии Вопросы
Чтобы настроить сервер XAMPP для отправки почты с локального хоста, мы должны внести изменения в два файла sendmail.ini и php.ini. Откройте папку xampp. По имени «sendmail.ini» присутствует в файле sendmail, а «php.ini» присутствует в файле php в папке xampp .
Шаг 1:
- Перейдите в C: / xampp / sendmail: откройте файл sendmail.ini в блокноте или любом текстовом редакторе и внесите следующие изменения.
change smtp_server=mail.yourdomain.com to smtp_server=smtp.gmail.com change smtp_port to smtp_port=587 change smtp_ssl=auto to smtp_ssl=tls
uncomment ;error_logfile=error. log to error_logfile=error.log uncomment ;debug_logfile=debug.log to debug_logfile=debug.log write your gmail id in auth_username: auth_username=*****@gmail.com write your gmail assword in auth_password: auth_password=*****
write your gmail id in force_sender: *****@gmail.com change hostname to hostname=localhost
Шаг 2
- Перейдите в C: / xampp / php: откройте файл php.ini в блокноте или в любом текстовом редакторе, перейдите в [mail function] и внесите следующие изменения.
comment SMTP=localhost by putting semicolon infront=>;SMTP=localhost comment smtp_port=25 by putting semicolon infront=>;smtp_port=25 comment sendmail_from= by putting semicolon infront=>;sendmail_from=specify path of file in sendmail_path to sendmail_path=C:\xampp\sendmail\sendmail.exe check if extension=php_openssl.dll is enabled=>If there is semicolon in front then un-comment it by removing that semicolon
После выполнения указанных шагов, если письмо не было отправлено с помощью функции mail, перейдите в C: / xampp / sendmail и откройте error. log, чтобы увидеть, что произошла ошибка.
Примечание. Здесь показана процедура для gmail, но ее можно распространить на другие письма, изменив сервер smtp и номер порта. При использовании gmail позаботьтесь о том, чтобы включить параметр, позволяющий получить доступ к менее защищенному веб-приложению.
Рекомендуемые посты:
Как настроить XAMPP для отправки почты с локального хоста с помощью PHP?
0.00 (0%) 0 votes
Отправить почту PHP HTML с вложениями
Если вы действительно хотите узнать, как отформатировать Интернет-сообщение, вам следует обратиться к его запросу комментариев (он же RFC). Документ RFC2045, выпущенный в ноябре 1996 г., определяет «Многоцелевые расширения почты Интернета — формат тел сообщений Интернета».
Формат как-то очень строгий, и его нужно соблюдать как есть.
Обычно сообщение содержит заголовок и тело. Заголовок определяет тип сообщения, способ его форматирования и некоторые другие поля, которые отличаются от одного типа к другому.
Тело состоит из разных сущностей. Сущность может быть, например, просто обычным текстом вроде «Привет!» но также может быть изображением, вложением, чем угодно.
ПРИМЕЧАНИЕ В следующих примерах все, что заключено в квадратные скобки (например, {hello}), следует заменить на ваше реальное значение. Любая новая строка на самом деле является CRLF (например, ASCII 13 + ASCII 10). Где вы видите, что к нему прилипают два CRLF. Это был бы худший момент, чтобы показать, насколько вы креативны.
В основном для сообщения электронной почты с вложениями заголовок должен выглядеть так:
MIME-версия: 1.0
Кому: {email @ domain}
Тема: {email-subject}
X-Priority: {2 (высокий)}
Content-Type: составной / смешанный; border = "{смешанный-boudary}"
В приведенном выше примере {mixed-boudary} может быть любым уникальным значением хеш-функции, например 000008050800060107020705. Остальные не требуют пояснений.
Теперь, когда мы хотим добавить новый объект к сообщению (например, тело сообщения, изображение, вложение), мы должны сообщить почтовому агенту, что прибывает новый раздел , т.е. для добавления к этому объекту префикса значения {смешанная граница}.Мы называем это «открытой границей». Обратите внимание, что, открывая границу, мы не вставляем эту границу, как было определено изначально, мы используем еще два знака минус впереди, например — {mixed-boudary}. Когда мы закрываем границу, мы действуем аналогичным образом, за исключением того, что мы должны использовать еще 2 знака минус в конце, например — {mixed-boudary} —
- {смешанный-баударный}
содержание сущности
- {смешанный-boudary} -
Поскольку почтовый агент должен понимать, какой тип имеет содержимое нашей новой вставленной сущности, мы должны объявить это сразу после открытия границы.Объявление — это просто заголовок, который содержит только те параметры / значения, которые совместимы с сущностью.
Для содержимого тела HTML мой заголовок объекта будет выглядеть так:
Content-Type: текст / html; charset = utf-8
Кодирование передачи содержимого: 7 бит
, так что все тело (заключенное в границы), наконец, будет выглядеть так:
- {смешанный-баударный}
Тип содержимого: текст / html; charset = utf-8
Кодирование передачи содержимого: 7 бит
Lorem ipsum dolor sit amet, conctetur adipiscing elit.Пеллентеский бархат
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус
Quis Purus в erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, conctetur ex et, rhoncus risus.
Если необходимо вставить еще один объект, мы действуем точно так же, как указано выше. Когда больше нет данных для добавления к сообщению, мы закрываем смешанную границу, т. е. CRLF + — {смешанный язык} -.
Если по какой-либо причине объект должен быть вставлен с альтернативным представлением (например,тело сообщения вставляется как в формате обычного текста, так и в формате HTML), тогда содержимое сущности должно быть объявлено с помощью multipart / alternate типа содержимого (хотя глобальный заголовок multipart / mixed все еще остается!) Каждое альтернативное представление будет заключено в эту новую границу.
Полный пример ниже:
MIME-версия: 1.0
Кому: {email @ domain}
Тема: {email-subject}
X-Priority: {2 (высокий)}
Content-Type: составной / смешанный; border = "{смешанный-boudary}"
- {смешанный-boudary}
Content-Type: составной / альтернативный; border = "{альтернативный-boudary}"
- {альтернатива-boudary}
Content-Type: текст / простой; charset = utf-8;
Кодирование передачи содержимого: 7 бит
Lorem ipsum dolor sit amet, conctetur adipiscing elit.Пеллентеский бархат
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус
Quis Purus в erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, conctetur ex et, rhoncus risus.
- {альтернатива-boudary}
Тип содержимого: текст / html; charset = utf-8;
Кодирование передачи содержимого: 7 бит
Lorem ipsum dolor sit amet, conctetur adipiscing elit.Пеллентеский бархат
dapibus arcu. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус
Quis Purus в erat euismod ullamcorper vitae eget dolor. Aliquam tempor erat
accumsan, conctetur ex et, rhoncus risus.
- {альтернатива-boudary} -
- {смешанный-boudary}
Content-Type: application / pdf; name = "myfile.pdf"
Кодирование передачи содержимого: base64
Content-Disposition: вложение; filename = "myfile.pdf"
JVBERi0xLjINOCAwIG9iag08PCAvTGVuZ3RoIDkgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
ID4 + DXN0cmVhbQ1oQ51bbY / cNg7 + BfsfhAUO11w3riW / B7gPaZEAAdpcm06RL8EBzoyn68uM
vZ3xZLv // khKsuUxNaMNiiabpUg + pKiHsmxJEcN / UsgiilP4ab2 / + XF1I81vszSqclHIOEpj
sdrf / PC2EFVUpmK1vXkZxVKs1uJlJJVYPYrvPra7XVvvxYdIrE7rL83hhVj97 + bNyjUoFam7
FnOB + tubGI3FZEkwmhpKXpVRnqJi0PCyjBJ1DjyOYqWBxxXp / 1h4X + ov9abZt434pV0feoG /
ars / xU / 9 / qEZmm7diJ + abmgOr0TGeFNFEuXx5M4B95Idns / QAaJMI1IpKeXi9 + ZhaPafm4NQ
cRwzNpK0iirlRvisRBZpVJa + PP51091kkjBWBXrJxUuZRjIXh0Z8FN3MnB5X5st5Kay9355n
- {смешанный-boudary} -
СОВЕТЫ
Используйте предпочтительный почтовый клиент (у меня Thunderbird) и отправьте на только одно сообщение в виде обычного текста, только один HTML, одно смешанное и затем каждое из предыдущих, но с одним вложенным файлом. Когда вы получаете сообщение, просто изучите его источник (Просмотр -> Сообщение источник).
@Edit: очень хорошо документированный пример использования + пример PHP можно найти здесь
Отправка вложений с помощью PHP Mail ()
Php
if (isset ($ _ POST) &&! Empty ($ _ POST)) {
if (! Empty ($ _ FILES [‘attachment’] [‘ имя ‘])) {
$ file_name = $ _FILES [‘ вложение ‘] [‘ имя ‘];
$ temp_name = $ _FILES [‘вложение’] [‘tmp_name’];
$ file_type = $ _FILES [‘вложение’] [‘тип’];
$ base = базовое имя ($ имя_файла);
$ extension = substr ($ base, strlen ($ base) -4, strlen ($ base));
// разрешены только эти типы файлов
$ allowed_extensions = array («.doc «,» docx «,» .pdf «,» .zip «,» .png «);
// проверяем, разрешен ли этот тип файла
if (in_array ($ extension, $ allowed_extensions)) {
// основные сведения о почте
$ from = $ _POST [‘user_mail’];
$ to = «phpcodertech@gmail. com»;
$ subject = $ _POST [‘user_name’];
$ message = $ _POST [‘user_message’];
// вещи, которые вам нужны
$ file = $ temp_name;
$ content = chunk_split (base64_encode (file_get_contents ($ file)));
$ uid = md5 (uniqid5 (uniqid5) (time ())); // уникальный идентификатор
// стандартные почтовые заголовки
$ header = «From:».$ от. «\ r \ n»;
$ header. = «Reply-To:». $ Replyto. «\ г \ п»;
$ header. = «Версия MIME: 1.0 \ r \ n»;
// объявляем несколько типов электронной почты (простой текст + attch)
$ header. = «Content-Type: multipart / mixed; Border = \» «. $ Uid.» \ «\ R \ n «;
$ header. = «Это сообщение, состоящее из нескольких частей, в формате MIME. \ R \ n»;
// часть обычного текста
$ header.= «-«. $ uid. «\ r \ n»;
$ header. = «Content-type: text / plain; charset = iso-8859-1 \ r \ n»;
$ header. = «Content-Transfer-Encoding: 7bit \ r \ n»;
$ header. = $ Message. «\ г \ п»;
// часть атрибута
$ header. = «-«. $ Uid. «\ R \ n»;
$ header. = «Content-Type:». $ File_type. «; Name = \» «. $ File_name.» \ «\ R \ n»;
$ header. = «Content-Transfer-Encoding: base64 \ r \ n»;
$ заголовок.= «Content-Disposition: attachment; filename = \» «. $ File_name.» \ «\ R \ n»;
$ header. = $ Content. «\ R \ n»; // забросил 64 закодированных attch
// отправка почты — сообщение находится не здесь, а в заголовке, состоящем из нескольких частей
if (mail ($ to, $ subject, $ message, $ заголовок)) {
эхо «успех»;
} else {
эхо «сбой»;
echo error_get_last () [‘сообщение’];
}
} else {
echo «тип файла не разрешен»; } // выводить html-файл
} else {
echo «файл не отправлен»; }
}
?>
Почта с заголовками или вложениями
Python 2.7/3 | Java 8/11 | PHP 5/7 | Рубин | Вперед 1.11 / 1.12+ | Node.jsКогда вы отправляете почту с помощью Mail API, есть некоторые ограничения на заголовки, которые вы можете использовать, и типы файлы, которые вы можете прикрепить.
Это решение больше не рекомендуется: На этой странице описано, как использовать устаревшая служба App Engine. Приложения, использующие эту службу, могут работать только в Среда выполнения PHP 5 и ее необходимо обновить до рекомендуемое решение перед переходом на PHP 7 время выполнения.Исходящее электронное письмо имеет заголовки, содержащие подробную информацию о сообщении, например отправитель, получатель, дата и тема. У каждого заголовка есть имя и значение. Вы также можете включить следующие заголовки в исходящее письмо; для обеспечения безопасности для целей, другие заголовки не допускаются:
- In-Reply-To
- Идентификатор списка
- Список-Отписаться
- от имени
- Список литературы
- Дата отправки
- Resent-From
- Resent-To
Почта с вложениями
Исходящее сообщение электронной почты может иметь файловые вложения.Каждое приложение имеет имя файла и данные файла. Данные файла могут поступать из любого источника, например из файл данных приложения или хранилище данных.
Запрещенные расширения имен файлов
В качестве меры безопасности для защиты от вирусов вложения электронной почты не могут использовать следующие расширения файлов, а ZIP-файлы не могут содержать файлы с расширением следующие расширения файлов:
- аде
- ADP
- летучая мышь
- ЧМ
- cmd
- ком
- cpl
- exe
- hta
- ins
- isp
- jse
- библиотека
- mde
- МСК
- МСН
- мст
- пиф
- scr
- sct
- шб
- системный
- vb
- vbe
- vbs
- vxd
- wsc
- WSF
- wsh
Типы вложений и многоцелевых расширений электронной почты (MIME)
Тип MIME вложения определяется расширением файла.МИМ type определяет тип отправляемого содержимого и может определять, как эти данные передаются.
Ниже приведен список типов MIME и соответствующих им файлов.
расширения. Вы не ограничены этими расширениями, но если вы используете неизвестное
расширение, App Engine присвоит ему MIME-тип application / octet-stream
.
Тип MIME | Расширения имен файлов |
---|---|
приложение / msword | doc, docx |
заявка / pdf | |
приложение / rss + xml | RSS |
приложение / vnd.google-earth.kml + xml | км |
приложение / vnd.google-earth.kmz | кмз |
приложение / vnd.ms-excel | XLS, XLSX |
приложение / vnd.ms-powerpoint | pps, ppt, pptx |
приложение / vnd.oasis.opendocument.presentation | odp |
application / vnd.oasis.opendocument. spreadsheet | ods |
приложение / vnd.oasis.opendocument.text | odt |
приложение / vnd.sun.xml.calc | sxc |
приложение / vnd.sun.xml.writer | sxw |
приложение / x-gzip | gzip |
приложение / zip | застежка-молния |
аудио / базовое | au snd |
аудио / FLAC | флак. |
аудио / средний | средний, rmi |
аудио / mp4 | m4a |
аудио / MPEG | mp3 |
аудио / ogg | oga, ogg |
audio / x-aiff | aif, aifc, aiff |
аудио / x-wav | WAV |
изображение / gif | gif |
изображение / jpeg | jpeg, jpg, jpe |
изображение / png | png |
изображение / tiff | tiff, tif |
изображение / vnd.wap.wbmp | wbmp |
изображение / x-ms-bmp | BMP |
текст / календарь | МИКС |
текст / значения, разделенные запятыми | CSV |
текст / CSS | css |
текст / html | htm, html |
текст / простой | asc, c, diff, log, patch, pot, text, txt |
текст / x-vcard | vcf |
видео / mp4 | mp4 |
видео / mpeg | МПГ, МПГ, МПЭ |
видео / ogg | огв |
видео / quicktime | qt, mov |
видео / x-msvideo | avi |
Использование функции mail () в PHP на Ubuntu — Linux Hint
Функция mail () — это встроенная функция PHP, которая используется для отправки электронной почты с локального хоста.Но для отправки электронной почты с помощью этой функции требуются некоторые настройки. Для настройки конфигурации вам потребуется реальная информация о почтовом сервере. Вы можете использовать информацию о почтовом сервере вашего активного хостинг-сервера или любую информацию о бесплатном почтовом сервере. Учетная запись Gmail и информация о SMTP-сервере Gmail используются в этом руководстве для отправки электронной почты с помощью функции mail ().
Настройка конфигурации
Для настройки конфигурации потребуются два файла: php.ini , а для настройки почтового сервера требуется еще один файл. Следуйте инструкциям ниже, чтобы настроить конфигурацию. На PHP доступно множество пакетов для отправки электронной почты. msmtp — это клиент почтового сервера PHP, который используется в этом руководстве для отправки электронной почты с помощью функции PHP mail ().
Шагов :
Выполните следующую команду, чтобы установить пакет msmtp в Ubuntu для настройки почтового сервера:
$ sudo apt-get install msmtp
Создайте файл конфигурации с именем / etc / msmtprc с помощью следующей команды:
Добавьте в файл следующее содержимое.Добавьте действительный адрес электронной почты для пользователя и действительный пароль для пароля , который будет использоваться для отправки электронной почты. Установите адрес электронной почты отправителя для form value.
по умолчаниюtls на
tls_starttls на
tls_trust_file /etc/ssl/certs/ca-certificates.crt
учетная запись по умолчанию
хост smtp.gmail.com
порт 587
9 auth имя пользователя gmail2. com
пароль user_password
от sender_email_address
Выполните следующие команды, чтобы установить владельца и разрешения для файла / etc / msmtprc :
$ sudo chown fahmida / etc / msmtprc$ sudo chmod 0600 / etc / msmtprc
Откройте файл php.ini и измените следующее содержимое со следующими значениями:
SMTP = smtp.gmail.comsmtp_port = 587
sendmail_path = «/ usr / bin / msmtp -t -i»
Синтаксис :
bool mail (строка $ to, строка $ subject, строка $ message [, смешанные $ additional_headers [, string $ additional_parameters]])
Эта функция может принимать четыре аргумента. Первый аргумент принимает адрес электронной почты получателя. Второй аргумент берет тему письма.Третий аргумент принимает тело письма. Последний аргумент является необязательным и содержит дополнительную информацию об электронном письме в виде строки или массива.
Отправка электронной почты с помощью функции mail ()
В этом разделе руководства показаны различные примеры отправки электронной почты с помощью функции PHP mail ().
Пример 1. Отправка простого текстового сообщения электронной почты
В этом примере показано, как можно отправить простое текстовое электронное письмо с помощью функции mail (). Создайте файл PHP со следующим скриптом.
Вы должны установить действительный адрес электронной почты для переменной от $ до , чтобы получить вывод следующего скрипта. В качестве тела сообщения устанавливается простой текст.
php// Установите адрес электронной почты получателя
$ равным = «[электронная почта защищена]»;
// Задайте тему электронного письма
$ subject = «Это тестовое электронное письмо»;
// Установить тело письма
$ message = «Тестирует тело письма»;
// Установите информацию заголовка
$ headers = «От: [электронная почта защищена] \ r \ n»;
$ заголовков.= «Ответить: [электронная почта защищена] \ r \ n»;
// Отправить электронное письмо с помощью функции message mail ()
if (mail ($ to, $ subject, $ message, $ headers))
{
echo «Электронное письмо успешно отправлено. \ R \ n»;
}
else {
echo «Электронная почта не отправлена.
«;
}
?>
Следующий вывод появится после запуска сценария с веб-сервера, если функция mail () работает правильно.
Следующие выходные данные появятся, если вы отметите почтовый ящик адреса электронной почты, который был установлен в качестве адреса электронной почты получателя.
Пример 2. Отправьте электронное письмо в формате HTML
В этом примере показано, как электронное письмо в формате HTML может быть отправлено с помощью функции mail (). Создайте файл PHP со следующим скриптом.
$ message переменная инициализируется содержимым HTML, которое будет отправлено как тело сообщения электронной почты. В переменной $ header упоминается, что содержимое электронного письма является HTML.
php// Установите адрес электронной почты получателя
$ равным = «[электронная почта защищена]»;
// Задайте тему электронного письма
$ subject = ‘Регистрация прошла успешно’;
// Установите тело письма
$ message = ‘
Ваша регистрация успешно завершена.
имя пользователя = fahmida20
пароль = aswQ34ghqw
‘;
// Установить возврат каретки
$ nl = «\ r \ n»;
// Установите заголовок Content-type
$ headers = ‘MIME-Version: 1.0’. $ Nl;
$ headers. = ‘Content-type: text / html; charset = iso-8859-1 ‘.$ nl;
// Установите дополнительную информацию заголовков
$ headers. = ‘To: Mehrab Hossain’. $ Nl;
$ заголовков. = ‘От: Администратор’. $ Nl;
$ заголовков. = ‘Копия: [электронная почта защищена]’. $ Nl;
// Отправить электронное письмо с помощью функции message mail ()
if (mail ($ to, $ subject, $ message, $ headers)) {
echo «Электронное письмо успешно отправлено. \ R \ n»;
}
else {
echo «Электронное письмо не отправлено.\ r \ n «;
}
?>
Следующий вывод появится после запуска сценария с веб-сервера, если функция mail () работает правильно.
Следующие выходные данные появятся, если вы отметите почтовый ящик адреса электронной почты, который был установлен в качестве адреса электронной почты получателя.
Пример 3. Отправьте электронное письмо с вложением
В этом примере показано, как можно отправить электронное письмо, вложив текстовый файл. Создайте текстовый файл с помощью следующего сценария.
Содержимое текстового файла считывается и кодируется перед вложением, а функция md5 () используется в сценарии для генерации случайного числа для смешанного содержимого. Вся необходимая информация добавляется в переменные $ headers и $ message перед отправкой электронного письма.
php// Установите адрес электронной почты получателя
$ равным = «[электронная почта защищена]»;
// Задайте тему электронного письма
$ subject = «Вложение файла»;
// Установить возврат каретки
$ nl = «\ r \ n»;
// Установите случайный хэш, который будет использоваться для смешанного содержимого
$ separator = md5 (time ());
// Прочтите содержимое прикрепленного файла
$ filename = ‘myfile.текст’;
$ content = file_get_contents ($ filename);
$ content = chunk_split (base64_encode ($ content));
// Установите сообщение электронной почты с информацией о вложении
$ message = «-«. разделитель $. $ nl;
$ message. = «Content-Type: text / plain; charset =» iso-8859-1 «». $ nl;
$ message. = «Content-Transfer-Encoding: 8bit». $ nl;
$ message. = «К письму прикреплен текстовый файл.». $ nl;
$ message. =» — «. $ separator. $ nl;
$ message. =» Content-Type: application / octet-stream; имя = «». $ filename. «» «. $ nl;
$ message. =» Content-Transfer-Encoding: base64 «. $ nl;
$ message. =» Content-Disposition: attachment «. $ nl;
$ message. = $ content. $ nl;
$ message. = «-«. $ separator. «-«;
// Установите заголовок Content-type
$ headers = ‘MIME-Version: 1.0 ‘. $ Nl;
$ headers. = «От: [электронная почта защищена]». $ Nl;
$ headers. = «Reply-To: [электронная почта защищена]». $ Nl;
$ headers. = «Content-Type: multipart / mixed; boundary =» «. $ Separator.» «». $ Nl;
// Отправить электронное письмо с помощью функции message mail ()
if (mail ($ to, $ subject, $ message, $ headers)) {
echo «Электронное письмо успешно отправлено с вложением. \ R \ n»;
}
else {
echo «Электронное письмо не отправлено.\ r \ n «;
}
?>
Следующий вывод появится после запуска сценария с веб-сервера, если функция mail () работает правильно.
Следующие выходные данные появятся, если вы отметите почтовый ящик адреса электронной почты, который был установлен в качестве адреса электронной почты получателя.
Заключение
В PHP существует множество способов отправки электронных писем. Функция PHP mail () не работает должным образом в Ubuntu после настройки конфигурации.В этом руководстве показаны необходимые конфигурации и способ отправки электронных писем с помощью функции PHP mail ().
Отправка электронной почты с помощью PHP и SendGrid — Документация по SendGrid | SendGrid
Мы рекомендуем использовать SendGrid PHP, нашу клиентскую библиотеку, доступную на GitHub, с полной документацией.
Библиотека официально не поддерживает V2 API, но вы можете использовать V2 со старой версией библиотеки. Для получения дополнительной информации см. Продолжение использования V2 в PHP.
Использование библиотеки PHP SendGrid
// с использованием библиотеки PHP SendGrid
// https: // github.com / sendgrid / sendgrid-php
требуется 'vendor / autoload.php';
$ sendgrid = новый SendGrid ("SENDGRID_APIKEY");
$ email = новый SendGrid \ Email ();
$ email-> addTo ("test@sendgrid.com")
-> setFrom ("you@youremail.com")
-> setSubject («Отправка с помощью SendGrid - это весело»)
-> setHtml ("и легко делать где угодно, даже с PHP");
$ sendgrid-> отправить ($ email);
Использование PHP с cURL
Если вы решите не использовать клиентскую библиотеку SendGrid, вы можете использовать функцию PHP cURL для запроса веб-API.
Php
требуется 'vendor / autoload.php';
Dotenv :: load (__ DIR__);
$ sendgrid_apikey = getenv ('ВАШЕ_SENDGRID_APIKEY');
$ sendgrid = новый SendGrid ($ sendgrid_apikey);
$ url = 'https://api.sendgrid.com/';
$ pass = $ sendgrid_apikey;
$ template_id = '';
$ js = массив (
'sub' => array (': name' => array ('Elmer')),
'фильтры' => массив ('шаблоны' => массив ('настройки' => массив ('включить' => 1, 'template_id' => $ template_id)))
);
$ params = массив (
'to' => "test @ example.com ",
'toname' => "Пример пользователя",
'from' => "you@youremail.com",
'fromname' => "Ваше имя",
'subject' => «Тест PHP»,
'text' => "Я пишу!",
'html' => " Я HTML! ",
'x-smtpapi' => json_encode ($ js),
);
$ request = $ url.'api / mail.send.json ';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_HTTPHEADER, array ('Авторизация: предъявитель'.$ sendgrid_apikey));
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Электронное письмо, отправленное с использованием заголовка SMTPAPI
Этот пример продвигает предыдущий пример на шаг вперед, добавляя наш заголовок SMTPAPI для установки категории и отправки нескольким получателям.Категория называется test_category, и электронное письмо будет отправлено как на example1@sendgrid.com, так и на example2@sendgrid.com. Обычный адрес, example3@sendgrid.com, не получит электронное письмо.
Php
$ url = 'https://api.sendgrid.com/';
$ user = 'ИМЯ ПОЛЬЗОВАТЕЛЯ';
$ pass = 'APIKEY';
$ json_string = массив (
'к' => массив (
example1@sendgrid.com, example2@sendgrid.com
),
'category' => 'test_category'
);
$ params = массив (
'api_user' => $ пользователь,
'api_key' => $ проход,
'x-smtpapi' => json_encode ($ json_string),
'to' => 'example3 @ sendgrid.com ',
'subject' => 'тестирование из curl',
'html' => 'test body',
'text' => 'Test body',
'from' => 'example@sendgrid.com',
);
$ request = $ url.'api / mail.send.json ';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Электронное письмо с вложением файла
В этом примере добавляется дополнительный параметр вложения для прикрепления файла с именем myfile.В этом примере предполагается, что файл находится в том же каталоге, что и ваш код, в противном случае вам нужно указать полный путь к файлу в переменной $ filePath.
Php
$ url = 'https://api.sendgrid.com/';
$ user = 'ИМЯ ПОЛЬЗОВАТЕЛЯ';
$ pass = 'ПАРОЛЬ';
$ fileName = 'myfile';
$ filePath = имя каталога (__ FILE__);
$ params = массив (
'api_user' => $ пользователь,
'api_key' => $ проход,
'to' => 'example@sendgrid.com',
'subject' => 'проверка отправки файла',
'html' => ' HTML
',
'text' => 'простой текст',
'from' => 'пример @ sendgrid.com ',
'files ['. $ fileName. ']' =>'@'.$filePath.'/'.$fileName.
);
print_r ($ params);
$ request = $ url.'api / mail.send.json ';
// Генерируем запрос на завиток
$ session = curl_init ($ запрос);
// Сообщаем curl использовать HTTP POST
curl_setopt ($ сеанс, CURLOPT_POST, истина);
// Сообщаем curl, что это тело POST
curl_setopt ($ session, CURLOPT_POSTFIELDS, $ params);
// Сообщаем curl не возвращать заголовки, но возвращать ответ
curl_setopt ($ сеанс, CURLOPT_HEADER, ложь);
// Сообщаем PHP не использовать SSLv3 (вместо этого выбираем TLS)
curl_setopt ($ сеанс, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt ($ session, CURLOPT_RETURNTRANSFER, истина);
// получаем ответ
$ response = curl_exec ($ сеанс);
curl_close ($ сеанс);
// распечатать все
print_r ($ ответ);
?>
Отправка html-сообщений с вложениями с использованием PHP mail
function send_mail ($ mailer_arr) {
$ mailer_arr = array_merge (array (‘to’ => », ‘from’ => », ‘subject’ => », ‘message’ => », ‘cc’ => », ‘bcc’ => », ‘file_name’ => », ‘file_path’ => »), $ mailer_arr);
$ EmailTo = strip_tags ($ mailer_arr [‘to’]);
$ EmailFrom = strip_tags ($ mailer_arr [‘от’]);
$ EmailSubject = $ mailer_arr [‘тема’];
$ EmailMessage = stripslashes ($ mailer_arr [‘сообщение’]);
$ EmailCc = strip_tags ($ mailer_arr [‘cc’]);
$ EmailBcc = strip_tags ($ mailer_arr [‘bcc’]);
$ filepath = $ mailer_arr [‘file_path’];
// если имя_файла задано явно, используйте его, иначе используйте имя загруженного файла
$ filename = $ mailer_arr [‘file_name’]? $ mailer_arr [‘имя_файла’]: конец (explode («/», $ filepath));
// тип возврата каретки (мы используем константу конца строки PHP)
$ eol = PHP_EOL;
$ заголовки = «»;
// основной заголовок
if (! Empty ($ EmailFrom))
$ headers.= «От:». $ EmailFrom. $ Eol;
if (! Empty ($ EmailFrom))
$ headers. = «Reply-To:». $ EmailFrom. $ Eol;
if (! Empty ($ EmailCc))
$ headers. = «CC:». $ EmailCc. $ Eol;
if (! Empty ($ EmailBcc))
$ headers. = «BCC:». $ EmailBcc. $ Eol;
$ заголовков. = «Версия MIME: 1.0». $ Eol;
/ ** в случае, если путь к файлу не задан, отправьте письмо в формате HTML без вложений ** /
if (! Isset ($ mailer_arr [‘file_path’]) || $ mailer_arr [‘file_path’] == ») {
$ заголовков.= «Content-type: text / html». $ Eol;
if (mail ($ EmailTo, $ EmailSubject, $ EmailMessage, $ headers))
return true;
иначе
вернуть ложь;
}
$ attachment = chunk_split (base64_encode (file_get_contents ($ filepath)));
// уникальный разделитель
$ separator = md5 (time ());
$ headers. = «Content-Type: multipart / mixed; граница = \» «. $ Separator.»\» «;
// сообщение
$ body =» «;
$ body. =» — «. $ Separator. $ Eol;
$ body. =» Content-Type: text / html; charset = \ «iso-8859-1 \» «. $ eol;
$ body. =» Content-Transfer-Encoding: 7bit «. $ eol. $ eol; // необязательно по умолчанию 7bit
$ body. = $ EmailMessage. $ Eol;
// вложение
$ body. = «-«. $ Separator. $ Eol;
$ body. = «Content-Type: application / octet-stream; name = \ «». $ filename.»\» «. $ eol;
$ body. =» Content-Transfer-Encoding: base64 «. $ eol;
$ body. =» Content-Disposition: attachment «. $ eol. $ eol;
$ body. = $ attachment. $ eol;
$ body. = «-«. $ separator. «-«;
// отправляем сообщение
if (mail ($ EmailTo, $ EmailSubject, $ body , $ headers)) {
return true;
}
else {
return false;
}
}
Как быстро запечь Mailgun с помощью PHP
Когда я начал кодировать, я помню, спорил ли я хотел бы изучить ASP.NET против PHP. Я читаю тысячи досок объявлений в ветках по каждому языку, чтобы помочь мне принять решение.
Я выбрал PHP в основном из-за сообщества, доступности примеров и того факта, что это открытый исходный код. Я уверен, что это те же причины, по которым вы решили погрузиться в мир PHP.
PHP — один из наиболее широко используемых языков, однако в сети много запутанного или устаревшего материала.
Цель этой конкретной публикации — предоставить вам подробный обзор того, как использовать Mailgun в вашей среде PHP с простыми примерами копирования и вставки
Использование официальной библиотеки Mailgun-PHP
Очень простой способ Использовать Mailgun и использовать его выдающийся API для доставки электронных писем — это установить официальную библиотеку PHP в вашей среде разработки, написанную и поддерживаемую нашим Mailgunner Travis как проект с открытым исходным кодом.
Шаги
-
Откройте терминал и перейдите в общую папку на сервере. Здесь вы храните свой веб-сайт и зависит от установки и используемого веб-сервера —
cd / var / www / html
-
Создайте пустой каталог для этого проекта —
mkdir mailgun-php
-
Enter каталог и выполните следующие команды —
cd mailgun-php
(изменяет каталог) -
Теперь выполните следующую команду, чтобы загрузить и установить Composer.-
curl -sS https://getcomposer.org/installer | php
Composer, когда используется таким образом, позволяет нам легко загружать библиотеки PHP локально в папке. Теперь давайте с помощью composer установим саму библиотеку Mailgun .
Поздравляем, вы установили официальную библиотеку Mailgun и теперь готовы к написанию кода !
Откройте файл и включите файл vendor / autoload.php
, чтобы начать работу.
Например: (взято из официальной документации , доступной здесь )
1 Php
2require 'vendor / autoload.php ';
3use Mailgun \ Mailgun;
4
5 $ mg = новый Mailgun («ключевой пример»);
6 $ domain = "example.com";
7
8
9 $ mg-> sendMessage ($ domain, array (
10'from '=>' bob@example.com ',
11'to' =>'sally@example.com ',
12'subject' => 'PHP SDK потрясающий!',
13'text '=>' Отправить сообщение так просто. '
14)
15)
16? >
Использование Swift Mailer
Использование Mailgun с Swift Mailer очень просто.
Убедитесь, что у вас под рукой есть учетные данные SMTP вашего домена! Вы можете найти их здесь:
-
Логин SMTP по умолчанию
-
Пароль по умолчанию
Шаги
-
Загрузите Composer для установки swiftmailer и его зависимостей 40003
-
Файлы будут загружены, после завершения просто создайте свой собственный пустой файл, чтобы проверить, что phpmailer работает.В своем терминале вы можете добиться этого, выполнив:
Здесь мы используем vim, но вы можете редактировать файл mailgun_with_swiftmailer.php
в любом редакторе, который вам удобнее всего.
1требовать vendor / autoload.php;
2
3
4 $ transport = Swift_SmtpTransport :: newInstance ('smtp.mailgun.org', 25)
5 -> setUsername ('ваше имя пользователя SMTP')
6 -> setPassword ('ваш SMTP пароль ')
7;
8
9
10 $ mailer = Swift_Mailer :: newInstance ($ transport);
11
12
13 $ message = Swift_Message :: newInstance ('Hello from Mailgun')
14 -> setFrom (array ('something @ domain.com '=>' John Doe '))
15 -> setTo (array ('someone_else@domain.org', 'third_contact@domain.org' => 'Третье имя'))
16 -> setBody ( «И это еще один козырный козырь для разработчика Mailgun!»)
17;
18
19
20 $ result = $ mailer-> send ($ message);
Дополнительную информацию об отправке более сложных электронных писем можно найти в официальной документации Swiftmailer, доступной в Интернете здесь.
Использование PHP Mailer
Mailgun также можно использовать вместе с одной из самых известных библиотек электронной почты PHP: PHP Mailer.
PHP Mailer — очень хорошая альтернатива встроенной функции php mail ()
, поскольку она ускоряет и позволяет вам сильно настраивать способ отправки электронной почты с помощью PHP. Дистрибутивы Linux и Mac OS X имеют встроенную функцию для отправки электронных писем, хотя и ненадежно. Кстати, стоит упомянуть, что в Windows вообще нет ничего для отправки электронных писем, поэтому я предлагаю вам продолжить чтение.
Шаги
-
Создайте папку с именем
phpmailer
-
mkdir phpmailer
-
cd phpmailer
-
-
для установки phpmailer и
Композитор готов, давайте установим Phpmailer (5.2.8) сейчас: -
Файлы будут загружены, после завершения просто создайте свой собственный пустой файл, чтобы проверить, что phpmailer работает
Здесь мы используем vim, но вы можете отредактировать файл mailgun_with_phpmailer.php
в в зависимости от того, с каким редактором вам удобнее всего.
1 Php
2
3требовать vendor / autoload.php;
4
5 $ mail = новый PHPMailer;
6
7 $ mail-> isSMTP ();
8 $ mail-> Host = 'smtp.mailgun.org ';
9 $ mail-> SMTPAuth = true;
10 $ mail-> Имя пользователя = 'username@domain.com';
11 $ mail-> Пароль = 'myp @ 55w0rd';
12 $ mail-> SMTPSecure = 'tls';
13
14 $ mail-> From = 'sender@domain.com';
15 $ mail-> FromName = 'Orlie';
16 $ mail-> addAddress ('recipient@domain.net ',' BOB ');
17 $ mail-> isHTML (true);
18
19
20 $ mail-> Subject = 'Электронное письмо отправлено с помощью Mailgun';
21 $ mail-> Body = ' Mailgun rocks , спасибо, phpmailer за то, что с помощью этого инструмента стало проще отправлять электронную почту! ';
22 $ mail-> AltBody = 'Mailgun крут, жаль, что вы не видите HTML-код, отправленный с помощью phpmailer, поэтому вместо этого вы видите это';
23
24if (! $ Mail-> send ()) {
25 echo "Сообщение не было отправлено.