首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Spring boot "spring-boot-starter-mail“发送电子邮件

通过Spring boot "spring-boot-starter-mail“发送电子邮件
EN

Stack Overflow用户
提问于 2015-10-19 19:19:24
回答 3查看 67.7K关注 0票数 18

我正在尝试使用spring boot发送电子邮件,但收到:

代码语言:javascript
复制
java.lang.UnsupportedOperationException: Method not yet implemented
        at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:89)
        at org.springframework.mail.javamail.SmartMimeMessage.<init>(SmartMimeMessage.java:52)
        at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:325)

我已经使用了这个maven条目:

代码语言:javascript
复制
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.6.RELEASE</version>
    </parent>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.2.6.RELEASE</version>
        </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
        <version>1.2.6.RELEASE</version>
    </dependency>

application.properties:

代码语言:javascript
复制
spring.mail.host=smtp.gmail.com
spring.mail.port= 25
spring.mail.username= test
spring.mail.password= test

我的代码是:

代码语言:javascript
复制
@Autowired
    private JavaMailSender javaMailSender;

private void send() {
        MimeMessage mail = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mail, true);
            helper.setTo("mymail@mail.co.uk");
            helper.setReplyTo("someone@localhost");
            helper.setFrom("someone@localhost");
            helper.setSubject("Lorem ipsum");
            helper.setText("Lorem ipsum dolor sit amet [...]");
        } catch (MessagingException e) {
            e.printStackTrace();
        } finally {}
        javaMailSender.send(mail);
        //return helper;
    }

这似乎是一个直截了当的问题,但别忘了我错过了什么!

EN

回答 3

Stack Overflow用户

发布于 2015-10-19 20:48:01

除了通过spring-boot-starter-mail引入的那个版本之外,类路径上还有另一个版本的javax.mail.internet.MimeMessage。常见的罪魁祸首是Geronimo的JavaMail规范jar。无论是哪种jar,都需要从应用程序的依赖项中排除它。如果你不确定它是从哪里来的,用-verbose:class运行你的应用程序会告诉你。

票数 18
EN

Stack Overflow用户

发布于 2017-08-21 14:40:30

不要使用javaMailSender.createMimeMessage();,请尝试使用MimeMessagePreparator & MimeMessageHelper

票数 1
EN

Stack Overflow用户

发布于 2019-05-06 07:20:22

这对我很有效:

代码语言:javascript
复制
    private TemplateEngine templateEngine;
    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    public MailContentBuilder mailContentBuilder;

    public void sendEmail(Users user, VerificationToken verificationToken) throws Exception {
        MimeMessagePreparator messagePreparator = mimeMessage -> {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

            String name = user.getFirstname();
            String vtoken = verificationToken.getVtoken();
            String url = "http://3.16.214.183:8888/home/".concat(String.valueOf(user.getUserid())).concat("/").concat(vtoken);
            String content = mailContentBuilder.build(name, url);
            helper.setTo(user.getEmail());
            helper.setSubject("AppName - Please Verify Your Email");
            helper.setText(content, true);
        };
        try {
            mailSender.send(messagePreparator);
        } catch (MailException e) {
            e.printStackTrace();
        }
   }

它似乎只需要这个依赖:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

并且我设置了属性:

代码语言:javascript
复制
spring.mail.host=smtp.gmail.com
spring.mail.port=465
spring.mail.username=user.myapp@gmail.com
spring.mail.password=password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false

仅供参考,您选择的端口不是任意的-例如,Gmail需要465端口。此外,您还需要对发送Gmail帐户进行更改,以使其正常工作。我很久以前就这样做了,但我敢肯定我以前见过这种例外。本例中使用的lambda可能有助于解决这个问题,但不幸的是我不记得了。请随时与我联系,如果您需要任何澄清或希望看到更多的代码的例子,我得到了工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33213060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档