用于回复和转发电子邮件的正确标头

2022-08-30 23:39:04

你是那个对电子邮件了如指掌的程序员吗?你能梦想邮件头,闭上眼睛写它们吗?也许你可以帮助我解决这个问题。

让我解释一下...

工作流程

  • 邮件服务器接收电子邮件
  • PHP cronjob 将 IMAP 中的所有电子邮件导入 MySQL 数据库
  • 用户在我的应用程序中查找所有电子邮件Inbox

发送电子邮件

在同一应用程序中,用户可以发送新电子邮件。我已经使用以下代码片段处理了这个问题。

$message = \Swift_Message::newInstance()
    ->setSubject($form->get('subject')->getData())
    ->setFrom('me@example.com')
    ->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 回复或转发保存在数据库中的电子邮件?

更新

我按照回答这个问题的建议实现了回复标头。但是,我不确定这是否也适用于转发。我只是想确保邮件提供商不会因为标题不正确而阻止我的电子邮件。


答案 1

我比较了“第一封”电子邮件和回复之间的标题差异。

要进行回复,似乎您必须在回复标题中添加两行:

  • 回复:[邮件 ID](在第一封邮件的标头中找到邮件 ID)

  • 参考资料: [消息 ID]

显然,您必须更改回复电子邮件中的 和。(我认为SwiftMailer自己创造了其他)fromto

要使用 SwiftMailer 在电子邮件标头中添加行,请按如下方式操作:

$headers = $message->getHeaders();

$headers->addTextHeader('In-Reply-To', $previousEmail->getHeaders()->getMessageId());

我放的这个getter就是我想象你的电子邮件实体的方式。

对于转发,只需打印电子邮件的来源并检查差异。

希望它能有所帮助。


更新:

对于前锋来说:这是完全一回事。我只是比较了两个标题。

您必须添加 和 。In-Reply-ToReferences

并回答您的更新 :您可以将任何您想要的内容(显然是字符串)放在电子邮件标题中。如果垃圾邮件分数中添加未知变量,则不会增长。


答案 2

推荐