java发送hotmail邮件_利用javamail收取Hotmail的退信

a4c26d1e5885305701be709a3d33442f.png

利用javamail收取Hotmail的退信

(2007-04-05 23:44:19)

Hotmail 是我最常用的Email Client。虽然时下hotmail的容量是小了些,速度也常常慢得让人不禁问候盖茨的母亲。但不可否认,它功能相当丰富,也比较稳定。尤其它的页面设计更是我等web编程人员的重要参照。

不象很多的POP3服务器,hotmail 实现了邮件传送状态通知(multipart/report)。我以前写的邮件客户端只支持收取 multipart/related、multipart/alternative和multipart/mixed

等多媒体类型的邮件,其他的因为不常见,我都忽略了。

客户不答应了,那还有什么好说的,还有什么比让客户满意更重要的事情呢,在没买单之前。

multipart/report 邮件类型的介绍参见 RFC1892,Sun的中文 Javamail Faq 里也有相关的说明,我摘录如下:

问. 当消息不能被传送时,就会返回一个失败消息。我如何检测这些“回弹”消息?

答:虽然有一个 Internet 标准用于报告这样的错误(multipart/report MIME 类型,参阅 RFC1892),但还没有广泛实现它。RFC1211

深入讨论了这个问题,包括了大量的例子。

在 Internet 电子邮件中,特定的邮箱或用户名是否存在,只能由传送消息的最终服务器决定。消息可能通过几个中继服务器(它们不能检测错误),然后再到达最终服务器。通常,当最终服务器检测到这一错误,它会返回一个消息给原始消息的发送人,指出失败的原因。有许多

Internet 标准讨论了这种传送状态通知 (Delivery Status Notifications),但大量服务器不支持这些新标准,相反使用特别技术来返回这种错误消息。这使得将“回弹”消息与产生问题的原始消息相互关联起来非常困难(注意,这个问题与

JavaMail 完全无关)。

有许多技术和试探法用于处理这一问题,但它们都不是完美的。一种技术是 Variable Envelope Return Paths,http://cr.yp.to/proto/verp.txt

描述了这一技术。

我修改了程序,也只是作了些简单的处理,代码如下:

private void parseMultipart(Multipart multipart) throws Exception {

for (int i = 0, n = multipart.getCount(); i < n; i ) {

BodyPart part = multipart.getBodyPart(i);

String disposition = part.getDisposition();

if (part.isMimeType("multipart/*")) {

this.parseMultipart((Multipart) part.getContent());

} else if (part.isMimeType("text/html")) {

//处理文本内容

}

/******* 处理附件,图片等等 ********/

} else if (part.isMimeType("message/delivery-status")) {

part.setFileName("details.txt"); //仿照outlook,details.txt 内容即传送状态通知的邮件头信息

saveAttachedFile(part);

} else if (part.isMimeType("message/rfc822")) {

MimeBodyPart mbp = new MimeBodyPart(part.getInputStream());

part.setFileName(mbp.getHeader("Subject", null) ".eml");

//仿照outlook,用退件的标题做文件名

saveAttachedFile(part);

}

}

}

如果要做得更友好,还可以做很多改进,比如根据退信找出已发送文件夹中的原件,或者激发一个通知事件等等。客户并不需要,我还是不要自作多情了。

大家都知道,hotmail 不是用pop3协议收信,而是用webdav协议。用java收发 hotmail 的邮件 ,参见《通过JavaMail访问Hotmail邮箱》。

文章引用自:http://locoy.kalvin.cn

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当需要在邮件正文中嵌入图片时,可以使用HTML格式的邮件,并在HTML中嵌入图片的URL。下面是使用JavaMail发送包含图片的HTML格式邮件的详细步骤: 1. 导入JavaMailjavax.activation库。 2. 创建一个MimeMessage对象。 3. 设置邮件的基本信息,包括发件人、件人、主题等。 4. 创建一个Multipart对象,用于组合邮件正文和图片。 5. 创建一个HTML格式的邮件正文。 6. 创建一个MimeBodyPart对象,用于包装图片。 7. 将图片附件添加到MimeBodyPart对象中。 8. 将MimeBodyPart对象添加到Multipart对象中。 9. 将Multipart对象设置为邮件内容。 10. 发送邮件。 下面是一份示例代码,可以参考: ```java import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class SendMailWithImage { public static void main(String[] args) { // 发件人电子邮箱 String from = "from@example.com"; // 件人电子邮箱 String to = "to@example.com"; // 指定发送邮件的主机为 smtp.qq.com String host = "smtp.qq.com"; //QQ 邮件服务器 // 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.auth", "true"); // 获取默认session对象 Session session = Session.getDefaultInstance(properties, new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("你的QQ账号", "你的QQ邮箱授权码"); //发件人邮件用户名、密码 } }); try{ // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From: 头部头字段 message.setFrom(new InternetAddress(from)); // Set To: 头部头字段 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set Subject: 头部头字段 message.setSubject("包含图片的邮件"); // 创建消息部分 BodyPart messageBodyPart = new MimeBodyPart(); // 消息 String messageText = "<h1>这是一封包含图片的HTML格式邮件!</h1><br/><img src=\"cid:image\">"; messageBodyPart.setContent(messageText, "text/html"); // 创建多重消息 Multipart multipart = new MimeMultipart(); // 设置文本消息部分 multipart.addBodyPart(messageBodyPart); // 附件部分 messageBodyPart = new MimeBodyPart(); String filename = "image.png"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setHeader("Content-ID", "<image>"); multipart.addBodyPart(messageBodyPart); // 发送合成消息 message.setContent(multipart); // 发送消息 Transport.send(message); System.out.println("邮件发送成功!"); }catch (MessagingException mex) { mex.printStackTrace(); } } } ``` 其中,需要替换的部分有: - `from@example.com` 为发件人邮箱地址。 - `to@example.com` 为件人邮箱地址。 - `smtp.qq.com` 为发件人邮箱SMTP服务器地址,可以根据实际情况进行修改。 - `你的QQ账号` 和 `你的QQ邮箱授权码` 分别为发件人邮箱的账号和授权码,需要替换为实际的内容。 - `image.png` 为要添加的图片文件名,需要替换为实际的图片文件名。 运行程序后,将会发送一封包含图片的HTML格式邮件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值