关于spring发email总结

本文记录了使用 Spring Mail 发送邮件过程中遇到的各种问题及其解决方案,包括配置错误、SMTP连接失败等,并提供了正确的配置示例。

        之前做了一个kafka发送短信邮件的项目,用spring来发送邮件遇到好多奇葩的问题。纪录一下,方便以后学习。

必须知道的配置:host地址是smtp地址,邮箱用户名,邮箱密码,这里配置的邮箱用户名必须和后面的发送者一直,不然要报错。报错如图:

Exception in thread "pool-10-thread-6" org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
	com.sun.mail.smtp.SMTPAddressFailedException: 501 5.1.3 Invalid address
; message exception details (1) are:
Failed message 1:
javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
	com.sun.mail.smtp.SMTPAddressFailedException: 501 5.1.3 Invalid address

	at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1862)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java


或者

Exception in thread "pool-10-thread-5" org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 440 mail from account doesn't conform with authentication (Auth Account:zhaoyong@ukelink.com|Mail Account:fangpeng@ukelink.com)
; message exception details (1) are:
Failed message 1:
com.sun.mail.smtp.SMTPSendFailedException: 440 mail from account doesn't conform with authentication (Auth Account:zhaoyong@ukelink.com|Mail Account:fangpeng@ukelink.com)

	at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108)
	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117)
	at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:424)
	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:346)
	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:341)
	at com.ucloudlink.bss.ucp.service.consumer.EmailsMessageService.sendMailMethod(EmailsMessageService.java:100)
	at com.ucloudlink.bss.ucp.service.consumer.EmailsMessageService.consumerEmail(EmailsMessageService.java:53)
	at com.ucloudlink.bss.ucp.kafka.KafkaProxy.proxyService(KafkaProxy.java:31)
	at com.ucloudlink.bss.ucp.kafka.EmailSmsConsumer$1.run(EmailSmsConsumer.java:73)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)

 遇到这种问题,有可能一下几种可能:

1.可能是网络问题,像我们公司严格限制网络

2.或者是smtp地址不存在

Exception in thread "main" org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response;
  nested exception is:
	java.net.SocketException: Software caused connection abort: recv failed. Failed messages: javax.mail.MessagingException: Exception reading response;
  nested exception is:
	java.net.SocketException: Software caused connection abort: recv failed; message exception details (1) are:
Failed message 1:
javax.mail.MessagingException: Exception reading response;
  nested exception is:
	java.net.SocketException: Software caused connection abort: recv failed
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2202)
	at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:2072)
	at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1899)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666)
	at javax.mail.Service.connect(Service.java:295)
	at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:397)
	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:346)
	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:341)
	at com.cloulink.test.ReadEmail.send(ReadEmail.java:36)
	at com.cloulink.test.ReadEmail.main(ReadEmail.java:16)
Caused by: java.net.SocketException: Software caused connection abort: recv failed
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at java.net.SocketInputStream.read(SocketInputStream.java:121)
	at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:124)
	at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
	at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89)
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2182)
	... 9 more
       记得要配置javaMailProperties.put("mail.smtp.auth", true);
javaMailProperties.put("mail.smtp.starttls.enable", true);

(spring mail 具体用法参照官网:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mail-usage)

<think>好的,我现在需要帮助用户了解如何在Spring Framework中配置邮件送。首先,用户提到了几个引用,我需要仔细看看这些引用内容,确保回答准确。 首先,引用[1]和[2]提到Spring的JavaMailSender类以及Spring Boot的进一步封装,这说明用户可能是在Spring Boot环境下配置,但问题明确问的是Spring Framework,所以可能需要区分两者的不同配置方式。不过引用[5]提到Spring Boot的starter配置,而用户的问题可能希望的是更基础的Spring配置,也就是不依赖Spring Boot的情况。 接下来,引用[3]和[5]提到了具体的实现步骤,包括使用Javax.mail、Apache Commons Email以及Spring Boot Starter Mail。用户的问题是关于Spring Framework的配置,所以需要关注如何在传统的Spring项目中设置邮件送,比如通过XML配置或者Java Config。 然后,用户提供的引用中有关于Spring事件机制的内容(引用[4]),这可能和邮件送关系不大,但需要确保回答不涉及这部分,专注于邮件配置。 现在,我需要组织步骤:首先添加依赖,然后配置JavaMailSender Bean,再编写送邮件的代码。同时,用户可能需要了解如何配置SMTP服务器、端口、认证信息等。 需要注意的是,在非Spring Boot项目中,配置可能需要手动创建JavaMailSenderImpl实例,并设置相关属性,如host、port、username、password,以及JavaMail的properties,比如启用TLS或SSL。例如,在XML配置中定义Bean,或者在Java配置类中使用@Bean注解。 另外,需要提醒用户关于授权码的问题,比如QQ邮箱需要使用授权码而不是登录密码,这可能在配置时容易出错。 最后,生成相关问题,可能需要包括如何送带附件的邮件,如何处理异常,或者如何测试邮件送功能等。根据引用中的内容,引用[3]提到了附件上传的方法,引用[5]提到了账户激活的应用场景,可以作为相关问题的基础。 总结:回答的结构应该是先依赖配置,然后配置邮件服务器参数,接着创建JavaMailSender Bean,最后示例代码和使用方法。同时,引用相关的引用内容来支持步骤,比如引用[5]中的配置示例,引用[1]和[2]关于JavaMailSender的说明。</think>### Spring Framework 邮件送配置教程 在Spring Framework中配置邮件送主要依赖于`JavaMailSender`接口及其实现类`JavaMailSenderImpl`,以下是详细步骤: --- #### **1. 添加依赖** 首先需引入`javax.mail`和Spring的邮件模块依赖(非Spring Boot项目): ```xml <!-- Maven配置 --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.3.20</version> </dependency> ``` --- #### **2. 配置邮件服务器参数** 通过XML或Java Config定义`JavaMailSenderImpl` Bean,设置SMTP服务器信息: ```java @Configuration public class MailConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.qq.com"); // SMTP服务器地址 mailSender.setPort(587); // 端口号(如587用于TLS) mailSender.setUsername("your-email@qq.com"); // 邮箱账号 mailSender.setPassword("your-authorization-code"); // 授权码,非登录密码[^5] Properties props = mailSender.getJavaMailProperties(); props.put("mail.smtp.auth", "true"); // 启用认证 props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密 return mailSender; } } ``` --- #### **3. 送邮件示例** 通过`JavaMailSender`送简单文本邮件: ```java @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendSimpleEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("noreply@example.com"); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` --- #### **关键点说明** - **SMTP服务器配置**:不同邮箱服务商(如QQ、Gmail)的SMTP地址和端口可能不同,需查阅对应文档。 - **授权码**:部分邮箱(如QQ)需通过安全设置生成授权码代替密码使用[^5]。 - **加密协议**:根据端口选择启用TLS(587端口)或SSL(465端口)加密[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值