当前位置: 首页 > 知识库问答 >
问题:

如何使用MimeMessageHelper发送带有附件的电子邮件?

扶开诚
2023-03-14

我无法正确发送带有附件的电子邮件。我正在使用Gradle和Spring 5。一切都设置正确,因为我已经发送了文本和html电子邮件。过了一段时间,我发送给客户的文本要求超过了电子邮件的限制,所以我需要将纯文本提取到CSV文件中,并将其作为附件发送到电子邮件中。看起来我只得到了所附文件的一部分,而不是完整的文件?

代码:

for(Entry<String, List<LabDipRequest>> entry : userNotificationMap.entrySet())
    {                           
        javaMailSender.send(mimeMessage -> {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
            messageHelper.setFrom(fromEmail);
            messageHelper.setTo(entry.getKey());
            messageHelper.setSubject("Exception Report");
            String val = ldReport.generateLabDipExceptionReport(entry.getValue());
            messageHelper.setText(val);
            FileSystemResource file = new FileSystemResource(new File("ExceptionReport.csv"));
            messageHelper.addAttachment("ExceptionReport.csv", file);
        });
    }

电子邮件正文无法正确发送。这是我在电子邮件收件箱中收到的原始邮件:

主题:报表MIME版本:1.0内容类型:多部分/混合
边界==\u Part\u 0\u 927559004.1603720386263“

如果提供了任何其他澄清,我还将输出一个日志:

DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false
220 smtp.gmail.com <hidden> - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 25
EHLO mongo.<hidden>.com
250-smtp.gmail.com at your service, [<hidden>]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO mongo.<hidden>.com
250-smtp.gmail.com at your service, [<hidden>]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN <hidden>
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "<hidden>"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: protocolConnect login, host=smtp.gmail.com, user=dummyaccount@gmail.com, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: <hidden>
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<dummyaccount@gmail.com>
250 2.1.0 OK <hidden>.33 - gsmtp
RCPT TO:<dummyaccount@gmail.com>
250 2.1.5 OK <hidden>.33 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   dummyaccount@gmail.com
DATA
354  Go ahead <hidden>.33 - gsmtp
Date: Mon, 26 Oct 2020 10:38:17 -0400 (EDT)
From: dummyaccount@gmail.com
To: dummyaccount@gmail.com
Message-ID: <<hidden>@mongo.<hidden>.com>
Subject: Report
MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="----=_Part_0_190448734.1603723096935"

.
250 2.0.0 OK  1603723099 <hidden>.33 - gsmtp
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 2.0.0 closing connection <hidden>.33 - gsmtp

共有1个答案

许焕
2023-03-14

我几乎可以肯定问题出在错误的文件路径中。仅对mime消息使用FileSystemResource。请尝试以下代码:

@SneakyThrows
@Async
public void sendEmailWithAttachment(String pathToAttachment) {
    MimeMessage message = emailSender.createMimeMessage();

    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setSubject(yourSubject);
    helper.setText(yourContent);
    helper.setTo(yourTo);
    helper.setFrom(yourFrom);

    FileSystemResource file = new FileSystemResource(new File(pathToAttachment));
    helper.addAttachment("LabDip", file);

    emailSender.send(message);
}
 类似资料:
  • 问题内容: 如何使用Outlook 2010发送带有附件的电子邮件(本地文件或Intranet中的文件)? 似乎不起作用。 问题答案: 不,这根本不可能。协议中对此没有规定,如果可能的话,这将是一个巨大的安全漏洞。 发送文件但让客户端发送我能想到的电子邮件的最佳方法是: 让用户选择一个文件 将文件上传到服务器 上传后让服务器返回随机文件名 在消息正文中建立一个包含上载文件的URL 的链接

  • 我正在将Mailgun集成到我的iOS应用程序中,并尝试发送带有附件的电子邮件。电子邮件已发送,但附件似乎已被忽略。有什么想法吗?代码如下。我使用的是AFNetworking 2,我没有使用本机的Mailgun Objective-C SDK,因为它似乎没有得到维护。 我可以使用curl发送附件,例如:

  • 问题内容: 我似乎找不到我编写的应该发送带有附件的电子邮件的php函数的问题。我已经为此苦苦挣扎了一段时间了。 编辑 问题是邮件的消息与文件混合在一起并作为附件发送。 问题答案: Artefacto让我更加关注输出,并且找到了解决方法:

  • 问题内容: 我正在尝试在带有附件的codeigniter上发送电子邮件。 我总是成功收到电子邮件。但是,我从未收到带有附件的文件。以下是代码,非常感谢所有评论。 问题答案: $ this- >电子邮件-> attach() 使您可以发送附件。将文件路径/名称放在第一个参数中。注意:使用文件路径,而不是URL。对于多个附件,请多次使用该功能。例如:

  • 有人能告诉我使用phpMailer发送带有附件的电子邮件的步骤吗?我已经准备好了发送电子邮件本身的所有代码,它工作正常,但我不明白如何发送附件。我有表单,如果我从POST上的文件输入中获得值,它只会给我文件名而不是完整路径。我认为为了添加附件,我需要获取文件的完整路径,对吗?我不必将文件存储在服务器上,只需通过电子邮件发送即可。

  • 我正在使用httplib2和Mailgun API发送我使用Google Drive下载的电子邮件附件,该电子邮件正在发送,但没有附件。。下面是我的代码。。