Правильные заголовки для отправки и отправки электронных писем
Вы тот программист, который знает все о письмах? Можете ли вы мечтать о почтовых заголовках, написать их с закрытыми глазами? Возможно, вы сможете помочь мне в этом вопросе.
Позвольте мне объяснить...
Workflow
- Почтовый сервер получает письма
- PHP cronjob импортирует все электронные письма из IMAP в базу данных MySQL
- Пользователь находит все электронные письма в
Inbox
в моем приложении
Отправка электронной почты
В этом же приложении пользователь может отправлять новые письма. Я обработал это, используя следующий фрагмент кода.
$message = \Swift_Message::newInstance()
->setSubject($form->get('subject')->getData())
->setFrom('[email protected]')
->setTo($form->get('to'))
->setBody(
$this->renderView(
'MailBundle:Email:contact.html.twig',
array(
'ip' => $request->getClientIp(),
'name' => $form->get('to')->getData(),
'message' => $form->get('message')->getData()
)
)
)
;
Это прекрасно работает. Если отправлено вышеприведенное письмо, я создаю новое электронное письмо в папке, отправленной IMAP. Это, в свою очередь, импортируется PHP cronjob и помещается в базу данных MySQL. Он отображается в папке отправки в моем приложении.
Проблема
Теперь, когда у вас есть общее представление о том, как работает мое приложение, у меня есть некоторые вещи, о которых я не уверен.
- Как создать ответы на импортированные письма с помощью SwiftMailer.
- Как перенаправить импортированные письма с помощью SwiftMailer
Я хотел бы использовать свое приложение в качестве реального почтового клиента и хочу, чтобы заголовки писем и т.д. были правильно установлены.
Я мог бы, конечно, просто отправить электронное письмо с оригинальным почтовым телом и субъектом, добавленным с помощью "RE:". Но я не уверен, что все. Я как-то подозреваю, что мне нужно делать больше.
Короче
Как я могу использовать SwiftMailer для ответа или пересылки электронной почты, которая сохраняется в базе данных?
Update
Я применил заголовки ответов, как это было предложено в ответе на этот вопрос. Однако я не уверен, что это будет работать и для пересылки. Я просто хочу, чтобы почтовые провайдеры не блокировали мои письма, потому что заголовки неверны.
Ответы
Ответ 1
Я сравнил, каковы различия в заголовке между "первым" электронным письмом и ответом.
Чтобы ответить, кажется, вам нужно добавить две строки в заголовок ответа:
Очевидно, что вы должны изменить from
и to
в ответном письме. (Я думаю, что SwiftMailer создает других сам по себе)
Чтобы добавить строку в заголовок электронной почты с помощью SwiftMailer, выполните следующие действия:
$headers = $message->getHeaders();
$headers->addTextHeader('In-Reply-To', $previousEmail->getHeaders()->getMessageId());
Этот getter, который я поставил, - это то, как я представляю ваш почтовый ящик.
Для форварда, juste распечатайте источник письма и проверьте различия.
Надеюсь, что это поможет.
Обновление:
Для перемотки: это точно то же самое. Я просто сравнил два заголовка.
Вы должны добавить In-Reply-To
и References
.
И чтобы ответить на ваше обновление: вы можете поместить все, что хотите (строка явно) в заголовок электронной почты. Счет спама не вырастет, если вы добавите в него неизвестную переменную.