【问题标题】:Sending email using Apache mail is not saved in the sent folder使用 Apache 邮件发送电子邮件未保存在已发送文件夹中
【发布时间】:2016-10-02 21:01:45
【问题描述】:

我正在使用 Apache Commons Mail 库发送电子邮件(使用他们的简单 SMTP 电子邮件示例)。

电子邮件是使用著名提供商之一发送的(我以雅虎为例)。电子邮件已成功发送。但是,当我登录到我的雅虎帐户时,我在已发送文件夹中看不到电子邮件。

是否需要启用标志或需要编写其他代码以确保电子邮件保存在已发送文件夹中?

请帮忙。谢谢你

【问题讨论】:

  • 您混淆了电子邮件协议的几种不同功能。将电子邮件保存在您的已发送文件夹中需要 IMAP 客户端。发送电子邮件只需要 SMTP。
  • 我认为 IMAP 用于检索电子邮件。将电子邮件保存在已发送文件夹中是否有不同的过程?我认为发送电子邮件时,电子邮件提供商会自动保存电子邮件(通常不会)
  • 我已经回答了类似的问题here
  • SMTP 用于发送(和接收)电子邮件。将电子邮件存储在 文件夹(甚至是“已发送”文件夹)中是使用 IMAP 客户端执行的。 SMTP 没有“文件夹”的概念,它是一劳永逸的。
  • @BillShannon 这很有道理。感谢您的参考。我希望有使用 Apache common 的示例

标签: java jakarta-mail apache-commons-email


【解决方案1】:

我刚刚遇到了同样的问题,通过以下方式解决了它:

    ...
    // send the org.apache.commons.mail.HtmlEmail
    email.send();
    copyIntoSent(email.getMailSession(), email.getMimeMessage());
}

private void copyIntoSent(final Session session, final Message msg) throws MessagingException
{
    final Store store = session.getStore("imaps");
    store.connect(IMAP_HOST, SMTP_AUTH_USER, SMTP_AUTH_PWD);

    final Folder folder = (Folder) store.getFolder("Sent Items");
    if (folder.exists() == false) {
        folder.create(Folder.HOLDS_MESSAGES);
    }
    folder.open(Folder.READ_WRITE);

    folder.appendMessages(new Message[] { msg });
}

请注意,这里必须使用 imap-host,而不是 smtp-host。这些协议的区别应该很清楚。

致以诚挚的问候

戴维

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2014-03-18
    • 2010-09-18
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2020-07-11
    相关资源
    最近更新 更多