Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Это старая версия документа!
Создание сообщений в Swift Mailer выполняется с помощью различных объектов MIME, предоставляемых библиотекой. Сложные сообщения могут быть быстро созданы с очень небольшими усилиями.
Вы можете думать о создании сообщения как о чем-то похожем на шаги, которые вы выполняете, когда нажимаете кнопку Создать в почтовом клиенте. Вы даете ему тему, указываете некоторых получателей, добавляете любые вложения и пишете свое сообщение:
// Create the message $message = (new Swift_Message()) // Give the message a subject ->setSubject('Your subject') // Set the From address with an associative array ->setFrom(['john@doe.com' => 'John Doe']) // Set the To addresses with an associative array (setTo/setCc/setBcc) ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) // Give it a body ->setBody('Here is the message itself') // And optionally an alternative body ->addPart('<q>Here is the message itself</q>', 'text/html') // Optionally add any attachments ->attach(Swift_Attachment::fromPath('my-document.pdf'));
Сообщение - это контейнер для всего, что вы хотите отправить кому-то другому. Есть несколько основных аспектов сообщения, которые вы должны знать.
Сообщение электронной почты состоит из нескольких относительно простых сущностей, которые объединяются различными способами для достижения различных результатов. Все эти сущности имеют один и тот же фундаментальный контур, но служат разным целям. Само Сообщение может быть определено как сущность MIME, Вложение-это сущность MIME, все части MIME-это сущности MIME-и так далее!
Основными единицами каждой сущности MIME-будь то само сообщение или Вложение-являются ее заголовки и тело:
Header-Name: A header value Other-Header: Another value The body content itself
Заголовки сущности MIME и ее тело должны соответствовать некоторым строгим стандартам, определенным различными документами RFC. Swift Mailer гарантирует, что эти спецификации выполняются с использованием различных типов объектов, включая Кодеры и различные типы заголовков для генерации сущности.
Из всех мимических сущностей сообщение-Swift_Messageсамое большое и сложное. Он имеет множество свойств, которые могут быть обновлены, и может содержать другие MIME-сущности-например, вложения-вложенные внутри него.
Сообщение имеет много различных заголовков, которые существуют для представления информации о сообщении почтовому клиенту получателей. Большинство из этих заголовков будут знакомы большинству пользователей, но мы перечислим основные из них. Хотя можно работать непосредственно с заголовками сообщения (или другой сущностью MIME), стандартные заголовки имеют методы доступа, предоставляемые для абстрагирования сложных деталей для вас. Например, хотя дата в сообщении записана в строгом формате, вам нужно только передать экземпляр setDate()DateTimeInterface .
| Заголовок | Описание | Аксессоры |
|---|---|---|
Message-ID | Идентифицирует это сообщение с помощью уникального идентификатора, обычно содержащего сгенерированное доменное имя и время | getId() / setId() |
Return-Path | Указывает, куда должны идти отскоки (Swift Mailer читает это для других целей). | getReturnPath() / setReturnPath() |
From | Указывает адрес человека, от которого пришло сообщение. Это может быть несколько адресов, если сообщение написали несколько человек. | getFrom() / setFrom() |
Sender | Указывает адрес лица, физически отправившего сообщение (более высокий приоритет, чемFrom:). | getSender() / setSender() |
To | Указывает адреса предполагаемых получателей | getTo() / setTo() |
Cc | Указывает адреса получателей которые будут скопированы в сообщение | getCc() / setCc() |
Bcc | Указывает адреса получателей, на которых будет скопировано сообщение вслепую. Другие получатели не будут знать об этих копиях. | getBcc() / setBcc() |
Reply-To | Указывает адрес на который отправляются ответы | getReplyTo() / setReplyTo() |
Subject | Задает строку темы, отображаемую в почтовом клиенте получателей | getSubject() / setSubject() |
Date | Указывает дату отправки сообщения | getDate() / setDate() |
Content-Type | Указывает формат сообщения (обычно text/plainили text/html). | getContentType() / setContentType() |
Content-Transfer-Encoding | Указывает схему кодирования в сообщении | getEncoder() / setEncoder() |
Хотя существует много доступных методов для объекта сообщения, вам нужно использовать только небольшое их подмножество. Обычно вы будете использовать setSubject(), setTo()и setFrom()перед установкой тела вашего сообщения сsetBody():
$message = new Swift_Message(); $message->setSubject('My subject');
Все сущности MIME (включая сообщение) имеют toString()метод , который можно вызвать, если вы хотите взглянуть на то, что будет отправлено. Например, если echo $message→toString();бы вы увидели что-то подобное:
Message-ID: Date: Thu, 25 Dec 2008 13:54:38 +1100 Subject: Example subject From: Chris Corbyn To: Receiver Name MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Here is the message
Мы рассмотрим более подробно методы, которые вы используете для создания своего сообщения, в следующих разделах.
Богатый контент может быть добавлен к сообщениям в Swift Mailer с относительной легкостью, вызвав такие методы , какsetSubject(),setBody(), addPart()и attach().
Строка темы, отображаемая в почтовом клиенте получателей, может быть задана с setSubject()помощью метода или в качестве параметраnew Swift_Message():
// Pass it as a parameter when you create the message $message = new Swift_Message('My amazing subject'); // Or set it after like this $message->setSubject('My amazing subject');
Тело сообщения-видимое, когда пользователь открывает сообщение-определяется вызовом setBody()метода. Если необходимо включить альтернативное тело, addPart()его можно использовать.
Тело сообщения - это основная часть, которую читает пользователь. Часто люди хотят отправить сообщение в формате HTML (text/html), в других случаях люди хотят отправить в обычном тексте (text/plain), или иногда люди хотят отправить обе версии и позволить получателю выбрать, как они видят сообщение.
Как правило, если вы собираетесь отправить электронное письмо в формате HTML, всегда включайте в него обычный текстовый эквивалент того же контента, чтобы пользователи, предпочитающие читать обычный текст, могли это сделать.
Если почтовый клиент получателя предлагает предпочтения для отображения текста, то HTML, то почтовый клиент представит эту часть пользователю там, где она доступна. В других случаях почтовый клиент будет отображать «лучшую» часть, которую он может - обычно HTML, если вы включили HTML:
// Pass it as a parameter when you create the message $message = new Swift_Message('Subject here', 'My amazing body'); // Or set it after like this $message->setBody('My <em>amazing</em> body', 'text/html'); // Add alternative parts with addPart() $message->addPart('My amazing body in plain text', 'text/plain');
Вложения являются загружаемыми частями сообщения и могут быть добавлены путем вызова attach()метода для сообщения. Вы можете добавлять вложения, которые существуют на диске, или создавать вложения на лету.
Хотя мы называем файлы, отправленные по электронной почте, «вложениями»-потому что они прикреплены к сообщению, - многие другие части сообщения на самом деле «прикреплены», даже если мы не называем эти части вложениями.
Файловые вложения создаются Swift_Attachmentклассом и затем присоединяются к сообщению с помощью attach()метода на нем. Для всех типов MIME «каждый день», таких как все графические форматы, документы word, PDF-файлы и электронные таблицы, вам не нужно явно устанавливать тип содержимого вложения, хотя это не повредит. Для менее распространенных форматов вы должны установить тип контента, который мы рассмотрим чуть позже.
Файлы, которые уже существуют либо на диске, либо по URL-адресу, могут быть прикреплены к сообщению всего одной строкой кода, используя Swift_Attachment::fromPath().
Вы можете прикреплять файлы, которые существуют локально, или, если ваша установка PHP allow_url_fopenвключена, вы можете прикреплять файлы с других веб-сайтов.
Вложение будет представлено получателю в виде загружаемого файла с тем же именем, что и прикрепленный:
// Create the attachment // * Note that you can technically leave the content-type parameter out $attachment = Swift_Attachment::fromPath('/path/to/image.jpg', 'image/jpeg'); // Attach it to the message $message->attach($attachment); // The two statements above could be written in one line instead $message->attach(Swift_Attachment::fromPath('/path/to/image.jpg')); // You can attach files from a URL if allow_url_fopen is on in php.ini $message->attach(Swift_Attachment::fromPath('http://site.tld/logo.png'));
Обычно вам не нужно явно устанавливать имя файла вложения, потому что имя вложенного файла будет использоваться по умолчанию, но если вы хотите установить имя файла, вы используете setFilename()метод вложения.
Вложение будет прикреплено обычным способом, но метаданные, отправленные внутри письма, переименуют файл во что-то другое:
// Create the attachment and call its setFilename() method $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') ->setFilename('cool.jpg'); // Because there's a fluid interface, you can do this in one statement $message->attach( Swift_Attachment::fromPath('/path/to/image.jpg')->setFilename('cool.jpg') );
Файлы, созданные во время выполнения, такие как PDF-документы или изображения, созданные с помощью GD, могут быть прикреплены непосредственно к сообщению, не записывая их на диск. Используйте Swift_Attachmentнепосредственно.
Вложение будет представлено получателю в виде загружаемого файла с указанным именем и типом содержимого:
// Create your file contents in the normal way, but don't write them to disk $data = create_my_pdf_data(); // Create the attachment with your data $attachment = new Swift_Attachment($data, 'my-file.pdf', 'application/pdf'); // Attach it to the message $message->attach($attachment); // You can alternatively use method chaining to build the attachment $attachment = (new Swift_Attachment()) ->setFilename('my-file.pdf') ->setContentType('application/pdf') ->setBody($data);
Swift_Attachment::fromPath()так как это будет использовать меньше памяти.
Вложения просто появляются в виде файлов, которые при желании можно сохранить на рабочем столе. Вы можете сделать так, чтобы вложение отображалось встроенным, где это возможно, с помощью setDisposition()метода вложения.
Вложение будет отображаться в окне просмотра электронной почты если почтовый клиент знает как его отобразить:
// Create the attachment and call its setDisposition() method $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') ->setDisposition('inline'); // Because there's a fluid interface, you can do this in one statement $message->attach( Swift_Attachment::fromPath('/path/to/image.jpg')->setDisposition('inline'));
Часто люди хотят включить изображение или другой контент в HTML-сообщение. Это легко сделать с помощью HTML-ссылок на удаленные ресурсы, но этот подход обычно блокируется почтовыми клиентами. Swift Mailer позволяет вам вставлять ваши носители непосредственно в сообщение.
Почтовые клиенты обычно блокируют загрузку с удаленных ресурсов, потому что этот метод часто использовался как средство отслеживания того, кто открыл электронное письмо. Если вы отправляете HTML-письмо и хотите включить изображение в сообщение, другой подход, который вы можете использовать, - это встроить изображение непосредственно.
Swift Mailer делает встраивание файлов в сообщения чрезвычайно упрощенным. Вы вставляете файл, вызывая embed()метод сообщения, который возвращает значение, которое вы можете использовать в srchrefатрибуте a или в вашем HTML.
Как и в случае с вложениями, можно вставлять динамически генерируемый контент без наличия существующего файла.
Встроенные файлы отправляются по электронной почте в виде специального типа вложений с уникальным идентификатором, используемым для ссылки на них в ваших HTML-атрибутах. В почтовых клиентах, которые не поддерживают встроенные файлы, они могут отображаться как вложения.
Хотя это обычно делается для изображений, теоретически это будет работать для любого отображаемого (или воспроизводимого) типа носителей. Однако поддержка других типов носителей (например, видео) зависит от почтового клиента.
Файлы, которые уже существуют либо на диске, либо по URL-адресу, могут быть встроены в сообщение всего одной строкой кода, используя Swift_EmbeddedFile::fromPath().
Вы можете вставлять файлы, существующие локально, или, если ваша установка PHP allow_url_fopenвключена, вы можете вставлять файлы с других веб-сайтов.
Файл будет отображаться с сообщением встроенным в HTML код везде где его идентификатор используется в качестве srcатрибута:
// Create the message $message = new Swift_Message('My subject'); // Set the body $message->setBody( '<html>' . ' <body>' . ' Here is an image <img src="' . // Embed the file $message->embed(Swift_Image::fromPath('image.png')) . '" alt="Image" />' . ' Rest of message' . ' </body>' . '</html>', 'text/html' // Mark the content-type as HTML ); // You can embed files from a URL if allow_url_fopen is on in php.ini $message->setBody( '<html>' . ' <body>' . ' Here is an image <img src="' . $message->embed(Swift_Image::fromPath('http://site.tld/logo.png')) . '" alt="Image" />' . ' Rest of message' . ' </body>' . '</html>', 'text/html' );
Swift_Image и Swift_EmbeddedFileявляются просто псевдонимами друг друга. Swift_Image существует для семантических целей.
embed()переменной in и используйте его в качестве srcатрибута:
// If placing the embed() code inline becomes cumbersome // it's easy to do this in two steps $cid = $message->embed(Swift_Image::fromPath('image.png')); $message->setBody( '<html>' . ' <body>' . ' Here is an image <img src="' . $cid . '" alt="Image" />' . ' Rest of message' . ' </body>' . '</html>', 'text/html' // Mark the content-type as HTML );
Образы, созданные во время выполнения, например образы, созданные с помощью GD, могут быть встроены непосредственно в сообщение без записи их на диск. Используйте стандартный new Swift_Image()метод.
Файл будет отображаться с сообщением встроенным в HTML везде где его идентификатор используется в качестве srcатрибута:
// Create your file contents in the normal way, but don't write them to disk $img_data = create_my_image_data(); // Create the message $message = new Swift_Message('My subject'); // Set the body $message->setBody( '<html>' . ' <body>' . ' Here is an image <img src="' . // Embed the file $message->embed(new Swift_Image($img_data, 'image.jpg', 'image/jpeg')) . '" alt="Image" />' . ' Rest of message' . ' </body>' . '</html>', 'text/html' // Mark the content-type as HTML );
Swift_Image и Swift_EmbeddedFileявляются просто псевдонимами друг друга. Swift_Image существует для семантических целей.
embed()переменной in и используйте его в качестве srcатрибута:
// If placing the embed() code inline becomes cumbersome // it's easy to do this in two steps $cid = $message->embed(new Swift_Image($img_data, 'image.jpg', 'image/jpeg')); $message->setBody( '<html>' . ' <body>' . ' Here is an image <img src="' . $cid . '" alt="Image" />' . ' Rest of message' . ' </body>' . '</html>', 'text/html' // Mark the content-type as HTML );
Получатели указываются в самом сообщении через setTo(), setCc()и setBcc(). Swift Mailer считывает этих получателей из сообщения, когда оно отправляется, чтобы знать, куда его отправить.
Получатели сообщений бывают трех типов:
To: получатели - первичные получатели (обязательно)Cc: получатели - получают копию сообщения (необязательно).Bcc: получатели – скрыты от других получателей (необязательно)Каждый тип может содержать один или несколько адресов. Можно перечислить только адреса получателей или персонализировать адрес, указав настоящее имя получателя.
Обязательно добавьте в качестве получателей только действительные адреса электронной почты. Если вы попытаетесь добавить недопустимый адрес электронной почты с setTo()setCc()помощью или setBcc(), Swift Mailer выдаст a Swift_RfcComplianceException.
Если вы добавляете получателей автоматически на основе источника данных, который может содержать недопустимые адреса электронной почты, вы можете предотвратить возможные исключения, проверив эти адреса с помощью:
use Egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\Validation\RFCValidation; $validator = new EmailValidator(); $validator->isValid("example@example.com", new RFCValidation()); //true
и только добавляя адреса, которые проверяют. Другой способ-обернуть ваш setTo()setCc()и setBcc()вызывает блок try-catch и обрабатывать Swift_RfcComplianceExceptionего в блоке catch.
Синтаксис для адресов
Если вы хотите ссылаться только на один адрес электронной почты (например, ваш From:адрес), вы можете просто использовать строку:
$message->setFrom('some@address.tld');
Если вы хотите включить имя, то вы должны использовать ассоциативный массив:
$message->setFrom(['some@address.tld' => 'The Name']);
Если вы хотите включить несколько адресов, то вы должны использовать массив:
$message->setTo(['some@address.tld', 'other@address.tld']);
Вы можете смешивать персонализированные (адреса с именем) и неперсонифицированные адреса в одном списке, смешивая использование ассоциативного и неассоциативного синтаксиса массива:
$message->setTo([ 'recipient-with-name@example.org' => 'Recipient Name One', 'no-name@example.org', // Note that this is not a key-value pair 'named-recipient@example.org' => 'Recipient Name Two' ]);
To: получатели требуются в сообщении и задаются с setTo()addTo()помощью методов или сообщения.
Чтобы задать To:получателей, создайте объект сообщения с помощью либо new Swift_Message( … ), затем вызовите setTo()метод с полным массивом адресов, либо используйте addTo()метод для итеративного добавления получателей.
setTo()Метод принимает входные данные в различных форматах, как описано ранее в этой главе. addTo()Метод принимает один или два параметра. Первый-адрес электронной почты, а второй необязательный параметр-имя получателя.
To: получатели видны в заголовках сообщений и будут видны другим получателям:
// Using setTo() to set all recipients in one go $message->setTo([ 'person1@example.org', 'person2@otherdomain.org' => 'Person 2 Name', 'person3@example.org', 'person4@example.org', 'person5@example.org' => 'Person 5 Name' ]);
Примечание
Многократные вызовы setTo()не добавят новых получателей-каждый вызов переопределяет предыдущие вызовы. Если вы хотите итеративно добавлять получателей, используйте этот addTo()метод:
// Using addTo() to add recipients iteratively $message->addTo('person1@example.org'); $message->addTo('person2@example.org', 'Person 2 Name');
Cc: получатели задаются с setCc()addCc()помощью методов или сообщения.
Чтобы задать Cc:получателей, создайте объект сообщения с помощью либо new Swift_Message( … ), затем вызовите setCc()метод с полным массивом адресов, либо используйте addCc()метод для итеративного добавления получателей.
setCc()Метод принимает входные данные в различных форматах, как описано ранее в этой главе. addCc()Метод принимает один или два параметра. Первый-адрес электронной почты, а второй необязательный параметр-имя получателя.
Cc: получатели видны в заголовках сообщений и будут видны другим получателям:
// Using setTo() to set all recipients in one go $message->setTo([ 'person1@example.org', 'person2@otherdomain.org' => 'Person 2 Name', 'person3@example.org', 'person4@example.org', 'person5@example.org' => 'Person 5 Name' ]);
Примечание
Многократные вызовы setCc()не добавят новых получателей-каждый вызов переопределяет предыдущие вызовы. Если вы хотите итеративно добавить Cc: recipients, используйте этот addCc()метод:
// Using addCc() to add recipients iteratively $message->addCc('person1@example.org'); $message->addCc('person2@example.org', 'Person 2 Name');
Bcc: получатели получают копию сообщения так, чтобы никто другой об этом не знал, и им задаются методы setBcc()или addBcc()этого сообщения.
Чтобы задать Bcc:получателей, создайте объект message с помощью любого new Swift_Message( … )из них , затем вызовите setBcc()метод с полным массивом адресов или используйте этот addBcc()метод для итеративного добавления получателей.
Этот setBcc()метод принимает входные данные в различных форматах, как описано ранее в этой главе. addBcc()Метод принимает один или два параметра. Первый - это адрес электронной почты, а второй необязательный параметр - имя получателя.
Только отдельный Bcc:получатель будет видеть свой адрес в заголовках сообщений. Другие получатели (включая других Bcc:получателей) не увидят этот адрес:
// Using setBcc() to set all recipients in one go $message->setBcc([ 'person1@example.org', 'person2@otherdomain.org' => 'Person 2 Name', 'person3@example.org', 'person4@example.org', 'person5@example.org' => 'Person 5 Name' ]);
Примечание
Многократные вызовы setBcc()не добавят новых получателей-каждый вызов переопределяет предыдущие вызовы. Если вы хотите итеративно добавить Bcc: recipients, используйте этот addBcc()метод:
// Using addBcc() to add recipients iteratively $message->addBcc('person1@example.org'); $message->addBcc('person2@example.org', 'Person 2 Name');
Интернационализированные Адреса Электронной Почты
Традиционно в адресах электронной почты разрешались только символы ASCII. С введением интернационализированных доменных имен (IDN) в доменном имени могут появиться символы, отличные от ASCII. По умолчанию Swiftmailer кодирует такие доменные имена в Punycode (например, xn–xample-ova.invalid). Это совместимо со всеми почтовыми серверами.
RFC 6531 ввел расширение SMTP, SMTPUTF8, которое позволяет использовать символы, отличные от ASCII, в адресах электронной почты с обеих сторон знака@. Для отправки на такие адреса ваш исходящий SMTP-сервер должен поддерживать расширение SMTPUTF8. Вы должны использовать кодировщик Swift_AddressEncoder_Utf8AddressEncoderадресов и включить обработчик Swift_Transport_Esmtp_SmtpUtf8Handlerрасширений SMTP:
$smtpUtf8 = new Swift_Transport_Esmtp_SmtpUtf8Handler(); $transport->setExtensionHandlers([$smtpUtf8]); $utf8Encoder = new Swift_AddressEncoder_Utf8AddressEncoder(); $transport->setAddressEncoder($utf8Encoder);
Электронное письмо должно содержать информацию о том, кто его отправил. Обычно это управляется From:адресом, однако есть и другие варианты.
Информация об отправителе содержится в трех возможных местах:
From: – адрес(адреса) автора сообщения (обязательно)Sender: – адрес одного человека, отправившего сообщение (необязательно)Return-Path: – адрес, куда должны идти отскоки (необязательно)
Вы всегда должны включать From:setFrom()в сообщение адрес. Swift Mailer будет использовать это значение по умолчаниюReturn-Path:, если не указано иное.
Sender:Адрес существует потому, что человек, который действительно отправил электронное письмо, может быть не тем человеком, который его написал. Он имеет более высокий приоритет, чем From:адрес, и будет использоваться в качестве Return-Path:адреса, если не указано иное.
From:Адрес является обязательным и устанавливается с setFrom()помощью метода сообщения. From: адреса указывают, кто на самом деле написал письмо и, как правило, кто его отправил.
Большинство людей, вероятно, не понимают, что у вас может быть более одного From:адреса, если письмо написал более одного человека-например, если письмо было составлено комитетом.
From:Адреса видны в заголовках сообщений и будут видны получателям.
Примечание
Если вы установили несколько From:адресов, то вы абсолютно должны установить Sender:адрес, чтобы указать, кто физически отправил сообщение.
// Set a single From: address $message->setFrom('your@address.tld'); // Set a From: address including a name $message->setFrom(['your@address.tld' => 'Your Name']); // Set multiple From: addresses if multiple people wrote the email $message->setFrom([ 'person1@example.org' => 'Sender One', 'person2@example.org' => 'Sender Two' ]);
Sender:Адрес указывает, кто отправил сообщение, и устанавливается с setSender()помощью метода сообщения.
Sender:Адрес виден в заголовках сообщений и будет виден получателям.
Этот адрес будет использоваться, Return-Path:если не указано иное.
Примечание
Если вы установили несколько From:адресов, то вы абсолютно должны установить Sender:адрес, чтобы указать, кто физически отправил сообщение.
Вы не должны устанавливать более одного адреса отправителя на сообщение, потому что это не возможно для более чем одного человека, чтобы отправить одно сообщение:
$message->setSender('your@address.tld');
Return-Path:Адрес указывает, куда должны быть отправлены уведомления об отказе, и устанавливается с setReturnPath()помощью метода сообщения.
Вы можете иметь только одинReturn-Path:, и он не должен включать личное имя.
Уведомления об отказе будут отправлены на этот адрес:
$message->setReturnPath('bounces@address.tld');
Для повышения целостности/безопасности сообщения можно подписать и/или зашифровать сообщение с помощью одного или нескольких подписывающих устройств.
S/MIME может подписывать и/или шифровать сообщение с помощью расширения OpenSSL.
Подписывая сообщение, подписчик создает подпись всего содержимого сообщения (включая вложения).
Сертификат и закрытый ключ должны быть закодированы PEM и могут быть либо созданы с использованием, например, OpenSSL, либо получены в официальном Центре сертификации (CA).
Для проверки подписи получатель должен иметь сертификат ЦС в списке доверенных эмитентов.
Убедитесь, что сертификат поддерживает защиту электронной почты.
При использовании OpenSSL это можно сделать с помощью параметра-addtrust emailProtection при создании сертификата:
$message = new Swift_Message(); $smimeSigner = new Swift_Signers_SMimeSigner(); $smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem'); $message->attachSigner($smimeSigner);
Когда закрытый ключ защищен с помощью парольной фразы, используйте вместо этого следующее:
$message = new Swift_Message(); $smimeSigner = new Swift_Signers_SMimeSigner(); $smimeSigner->setSignCertificate('/path/to/certificate.pem', ['/path/to/private-key.pem', 'passphrase']); $message->attachSigner($smimeSigner);
По умолчанию подпись добавляется как вложение, делая сообщение все еще читаемым для почтовых агентов, не поддерживающих подписанные сообщения.
Хранение сообщения в двоичном виде также возможно, но не рекомендуется:
$smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem', PKCS7_BINARY);
При шифровании сообщения (также известном как обертывание) все сообщение (включая вложения) шифруется с помощью сертификата, и получатель может затем расшифровать сообщение с помощью соответствующего закрытого ключа.
Шифрование гарантирует, что никто не сможет прочитать содержимое сообщения без закрытого ключа.
Обычно получатель предоставляет сертификат для шифрования и сохранения ключа дешифрования в тайне.
Также возможно использование как подписи, так и шифрования:
$message = new Swift_Message(); $smimeSigner = new Swift_Signers_SMimeSigner(); $smimeSigner->setSignCertificate('/path/to/sign-certificate.pem', '/path/to/private-key.pem'); $smimeSigner->setEncryptCertificate('/path/to/encrypt-certificate.pem'); $message->attachSigner($smimeSigner);
Используемый шифр шифрования может быть установлен в качестве второго параметра setEncryptCertificate ().
Видишь https://secure.php.net/manual/openssl.ciphers список поддерживаемых шифров.
По умолчанию сообщение сначала подписывается, а затем шифруется, это можно изменить, добавив:
$smimeSigner->setSignThenEncrypt(false);
Изменять это не рекомендуется, так как большинство почтовых агентов не поддерживают этот нестандартный способ.
Только если у вас возникли проблемы с методом sign then encrypt, это должно быть изменено.
При открытии электронной почты можно запросить отправку квитанции на чтение на указанный адрес. Чтобы запросить квитанцию на чтение, установите адрес с помощьюsetReadReceiptTo():
$message->setReadReceiptTo('your@address.tld');
При открытии письма, если почтовый клиент его поддерживает , на этот адрес будет отправлено уведомление.
Примечание
Чтение квитанций не будет работать для большинства получателей, так как многие почтовые клиенты автоматически отключают их. Те клиенты, которые отправят квитанцию на чтение, сообщат пользователю, что она была запрошена.
Набор символов сообщения (и его частей MIME) устанавливается с setCharset()помощью метода. Вы также можете изменить глобальное значение по умолчанию UTF-8, работая с Swift_Preferencesклассом.
Swift Mailer будет по умолчанию использовать набор символов UTF-8, если не переопределено иное. UTF-8 будет работать в большинстве случаев, так как он включает в себя все стандартные символы клавиатуры США в дополнение к большинству международных символов.
Это абсолютно жизненно важно, однако, что вы знаете, какой набор символов ваше сообщение (или это части MIME) написаны в противном случае ваше сообщение может быть получено полностью искаженным.
В Swift Mailer есть два места, где вы можете изменить набор символов:
Swift_PreferencesклассеЧтобы установить набор символов вашего сообщения:
Swift_Preferences::setCharset(); илиsetCharset()метод для сообщения или части MIME: 1// Approach 1: Change the global setting (suggested) Swift_Preferences::getInstance()->setCharset('iso-8859-2'); // Approach 2: Call the setCharset() method of the message $message = (new Swift_Message()) ->setCharset('iso-8859-2'); // Approach 3: Specify the charset when setting the body $message->setBody('My body', 'text/html', 'iso-8859-2'); // Approach 4: Specify the charset for each part added $message->addPart('My part', 'text/plain', 'iso-8859-2');
Тело каждой части пантомимы должно быть закодировано. Двоичные вложения кодируются в base64 с помощью Swift_Mime_ContentEncoder_Base64ContentEncoder. Текстовые части традиционно кодируются в кавычках с помощью Swift_Mime_ContentEncoder_QpContentEncoderor Swift_Mime_ContentEncoder_NativeQpContentEncoder.
Кодер сообщения или MIME-части устанавливается с помощью этого setEncoder()метода.
Quoted-printable-это безопасный выбор, потому что он преобразует 8-битный текст в 7-битный. Большинство современных SMTP-серверов поддерживают 8-битный текст. Это объявляется через расширение SMTP 8BITMIME. Если ваш исходящий SMTP-сервер поддерживает это расширение SMTP и поддерживает понижение уровня сообщения (например, преобразование в кавычки для печати на лету) при доставке на нисходящий сервер, который не поддерживает это расширение, вы можете использовать Swift_Mime_ContentEncoder_PlainContentEncoderвместо 8bitнего режим in. Это имеет то преимущество, что исходные данные немного более читабельны и компактны, особенно для незападных языков.
$eightBitMime = new Swift_Transport_Esmtp_EightBitMimeHandler(); $transport->setExtensionHandlers%%([%%$eightBitMime]); $plainEncoder = new Swift_Mime_ContentEncoder_PlainContentEncoder%%('%%8bit'); $message->>setEncoder($plainEncoder);
Длина строк в сообщении может быть изменена с помощью setMaxLineLength()метода на сообщении:
$message->setMaxLineLength(1000);
Swift Mailer по умолчанию использует 78 символов в строке сообщения. Это делается по историческим причинам и для того, чтобы сообщение можно было легко просмотреть в обычных текстовых терминалах
Строки, длина которых превышает указанную длину строки, будут заключены между словами.
Примечание
Вы никогда не должны устанавливать максимальную длину более 1000 символов в соответствии с RFC 2822. Это может привести к неопределенным побочным эффектам, таким как усечение частей вашего сообщения при его передаче между SMTP-серверами.
Вы можете изменить приоритет сообщения с setPriority()помощью кнопки . Установка приоритета не изменит способ отправки вашей электронной почты-это чисто ориентировочная настройка для получателя:
// Indicate "High" priority $message->setPriority(2);
Приоритет сообщения - это указание получателю, какое значение оно имеет. Swift Mailer позволяет установить приоритет, вызвав setPriorityметод. Этот метод принимает целочисленное значение от 1 до 5:
Swift_Mime_SimpleMessage::PRIORITY_HIGHEST: 1Swift_Mime_SimpleMessage::PRIORITY_HIGH: 2Swift_Mime_SimpleMessage::PRIORITY_NORMAL: 3Swift_Mime_SimpleMessage::PRIORITY_LOW: 4Swift_Mime_SimpleMessage::PRIORITY_LOWEST: 5// Or use the constant to be more explicit $message->setPriority(Swift_Mime_SimpleMessage::PRIORITY_HIGH);