Java Mail 发送邮件失败问题:Sending the email to the following server failed

转自:http://student.youkuaiyun.com/space.php?uid=51562&do=blog&id=13670

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1138)
at org.apache.commons.mail.Email.send(Email.java:1163)
at com.newer.servlet.EmailServlet.doPost(EmailServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.mail.AuthenticationFailedException: failed to connect
at javax.mail.Service.connect(Service.java:322)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1128)
... 16 more


查了很多资料,终于解决了。

做发送邮件的这个功能基本上做了一天,从昨天中午开始一直到凌晨一点,还是没解决掉,人都快崩溃了,开始是mail.jar和activation.jar这两个包没有导入,导入后就报上面这个连接异常。早上4:00多醒来了,实在睡不着。起来打开电脑,突然想起昨晚临睡前看email协议,邮件服务器,pop3,smtp.程序实在找不出什么错误,灵光一闪,就进入邮箱账号看看邮箱设置,发现没有开启pop3.smtp服务。开启后,邮件就能发送成功了。

所以在做发送邮件的java,或者jsp测试前,一定要记得把邮箱的pop3.smtp服务开启。所以有时候你的程序根本没有错误,但就是会出现一些让你根本就想不到得错误,这时候就得看看与你程序相关的一些其它的服务是否与程序的运行有关了,邮件发送时是这样,还有一个web项目比较常见的是银行付款。

查了一些资料,163邮箱在2005年以后注册的邮箱没有提供pop3.smtp服务,只有付费邮箱才有这个功能。

因此最好是用QQ邮箱或者sina邮箱进行测试,并且记得一定要开启pop3.smtp服务。

希望能给像我一样在程序路上前进的朋友能有一些帮助,因为我找着错误的时候,网上的帖子基本上没讲到这个,就是本身程序以外的而有关第三方产品的服务而导致的异常
发送邮件时遇到的 **“Media type test failed”** 和 **MAIL 命令失败(错误码 554)** 是较为常见的问题,通常涉及邮件服务器配置、客户端设置、内容类型识别或网络通信等多个方面。以下是对这两个问题的详细分析与解决方案。 ### 1. **Media Type Test Failed** 该错误通常出现在使用 SMTP 协议发送邮件时,邮件客户端尝试发送附件或特定格式的内容时,服务器无法识别或拒绝处理该媒体类型。问题可能来源于以下方面: - **邮件内容类型(MIME 类型)不被服务器支持**:某些邮件服务器对 MIME 类型有严格限制,例如对非标准附件类型(如 `.exe`、`.bat` 等)进行拦截。 - **客户端构造的 MIME 结构错误**:如果邮件客户端没有正确设置 `Content-Type` 或 `Content-Disposition`,服务器可能无法正确解析邮件内容,导致媒体类型测试失败。 - **防病毒/反垃圾邮件系统拦截**:某些邮件服务器或网关会扫描附件内容,即使 MIME 类型正确,也可能因内容特征被拒绝。 **解决方案**: - 检查附件类型是否为服务器允许的类型,避免使用被限制的扩展名。 - 确保邮件内容的 MIME 结构正确,使用标准的 `multipart/mixed` 或 `multipart/alternative` 格式封装邮件正文与附件。 - 如果使用自定义邮件客户端或脚本发送邮件,建议使用标准库(如 Python 的 `email` 模块)构造邮件内容,确保 MIME 正确性。 - 在邮件服务器端检查日志,确认具体拒绝原因,并根据日志提示调整配置或内容结构。 ### 2. **MAIL 命令失败(错误码 554)** SMTP 协议中的 `MAIL FROM:` 命令用于指定发件人地址。当服务器返回 **554 Transaction failed** 错误时,表示整个邮件事务失败,通常由以下原因引起: - **发件人地址无效或被拒绝**:例如使用了不存在的域名、伪造的发件人地址、未授权的发件人邮箱。 - **邮件服务器未正确配置 SPF、DKIM、DMARC 记录**:这些 DNS 记录用于验证邮件来源,若配置不当,接收方服务器可能拒绝接受邮件。 - **邮件内容被标记为垃圾邮件**:即使 `MAIL FROM` 合法,内容也可能因关键词、附件类型等原因被拒绝。 - **服务器临时问题或连接中断**:如网络不稳定、服务器过载等。 **解决方案**: - 验证发件人地址是否合法,确保域名存在且可通过 DNS 解析。 - 检查邮件服务器的 SPF、DKIM、DMARC 配置是否正确,推荐使用 [MXToolbox](https://mxtoolbox.com/) 等工具进行验证。 - 使用邮件测试工具(如 `telnet` 或 `swaks`)手动测试 SMTP 连接流程,观察具体在哪一步出错。 - 检查邮件内容,避免使用可能被标记为垃圾邮件的关键词或附件类型。 - 在服务器日志中查找详细错误信息,定位具体失败原因。 ### 示例:使用 Python 发送邮件并确保 MIME 正确性 ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders # 创建邮件对象 msg = MIMEMultipart() msg['From'] = 'sender@example.com' msg['To'] = 'receiver@example.com' msg['Subject'] = 'Test Email' # 添加正文 body = 'This is a test email.' msg.attach(MIMEText(body, 'plain')) # 添加附件 filename = 'test.txt' attachment = open('test.txt', 'rb') part = MIMEBase('application', 'octet-stream') part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', f'attachment; filename="{filename}"') msg.attach(part) # 发送邮件 server = smtplib.SMTP('smtp.example.com', 587) server.starttls() server.login('username', 'password') server.sendmail('sender@example.com', 'receiver@example.com', msg.as_string()) server.quit() ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值