使用Java mail发送邮件附件出现附件上产生.eml文件夹的问题及附件名.bin结尾问题...

近期,线上项目发出邮件是PDF附件但收到的邮件附件格式却不是PDF,发送邮件的技术为JAVA mail 经复现错误现象为下图:

163邮箱:

QQ邮箱:

 

eml问题排查思路:

1.首先,排除附件本身的问题,附件本身在执行发送邮件之前进行本地服务器文件落地,确认落地的文件确实为PDF格式且附件正常可用。

2.其次,排查公司用的邮件服务器问题是不是对PDF文件进行了某种转码,经验证通过从邮件服务器手动发送邮件,确认收到后的邮件附件正常为PDF格式。

3.最后,跟踪发送邮件的代码并在网上查询相关资料未发现任何和.eml有关的材料,通过在一篇博客中查看正确实例发现在Java mail中正文和附件使用的不是一个MimeBodyPart对象,修改后示例如下:

经测试错误原因是邮件正文和邮件附件用的MimeBodyPart对象是同一个,进而导致上述现象,解决办法为正文是一个MimeBodyPart对象,一个附件是一个MimeBodyPart对象,并将两个对象分别添加到MimeMultipart()

中,经再次测试,问题解决。

.bin问题解决

我在项目中遇到的问题并不是.bin问题,不过网络上有一些关于这个的资料,在本篇帖子中做个记录。

.bin问题的原因为附件名过长导致附件名编码异常,要做几处更改,如下:

 

问题修复后样图:

QQ邮箱

 

163邮箱

 

总结:

在遇到上述这种debug跟不到结尾的问题往往摸不着头脑,所以 解决这种问题的思路应该使用排除法,排除掉外界环境的因素后,认真有条理的跟踪程序代码并且参考一份正确的实例进行比对,这是解决问题的最快办法,至于问题原因这个有时间可以研究,但是在工作中要做的是以最快的速度解决生产环境出现的问题,降低损失。

在本次解决问题的过程中我参考了一篇正确示例代码,网址如下:

https://www.cnblogs.com/h--d/p/6138900.html

 

转载于:https://www.cnblogs.com/XH09/p/10981329.html

在Python3中,可以使用`imaplib`库来下载.eml文件附件。`imaplib`是Python标准库中用于实现IMAP(Internet Mail Access Protocol,互联网邮件访问协议)客户端的模块。 首先,需要连接到邮箱的IMAP服务器,并进行身份验证。可以使用`IMAP4_SSL`类来建立一个安全的连接。具体代码如下: ```python import imaplib # 连接到邮箱服务器 mail = imaplib.IMAP4_SSL('mail.example.com') # 登录邮箱账号 mail.login('username', 'password') ``` 接下来,可以使用`select()`方法选择邮箱中的某个文件夹(比如"Inbox")来获取邮件。然后,可以使用`search()`方法来搜索包含.eml文件附件邮件。找到匹配的邮件后,可以使用`fetch()`方法来获取附件的内容,并保存为文件。具体代码如下: ```python # 选择Inbox文件夹 mail.select('Inbox') # 搜索包含附件邮件 result, data = mail.search(None, 'ALL') mail_ids = data[0].split() # 遍历每封邮件 for mail_id in mail_ids: # 获取邮件的内容 result, data = mail.fetch(mail_id, '(RFC822)') raw_email = data[0][1] # 保存.eml文件 with open(f'{mail_id}.eml', 'wb') as f: f.write(raw_email) ``` 最后,使用`close()`方法关闭与IMAP服务器的连接。完整代码如下: ```python import imaplib # 连接到邮箱服务器 mail = imaplib.IMAP4_SSL('mail.example.com') # 登录邮箱账号 mail.login('username', 'password') # 选择Inbox文件夹 mail.select('Inbox') # 搜索包含附件邮件 result, data = mail.search(None, 'ALL') mail_ids = data[0].split() # 遍历每封邮件 for mail_id in mail_ids: # 获取邮件的内容 result, data = mail.fetch(mail_id, '(RFC822)') raw_email = data[0][1] # 保存.eml文件 with open(f'{mail_id}.eml', 'wb') as f: f.write(raw_email) # 关闭与IMAP服务器的连接 mail.close() mail.logout() ``` 请将上述代码中的 `'mail.example.com'`、`'username'`和`'password'`替换为您实际的邮箱服务器地址、用户和密码。 使用以上代码,就可以下载.eml文件附件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值