本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9697972
建立时间:2004年12月20日




[java语言]使用javamail发送html邮件
原创空间,  软件技术

邢红瑞 发表于 2005/10/3 18:55:17

使用javamail发送html邮件比较复杂 package org.tatan.mail; import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;import javax.mail.Session;import javax.mail.MessagingException;import javax.mail.Transport; public class SendHtmlMail {    public static void sendMessage(String smtpHost,                                   String from, String to,                                   String subject, String messageText)            throws MessagingException,java.io.UnsupportedEncodingException {         // Step 1:  Configure the mail session        System.out.println("Configuring mail session for: " + smtpHost);        java.util.Properties props = new java.util.Properties();        props.setProperty("mail.smtp.auth", "true");//指定是否需要SMTP验证        props.setProperty("mail.smtp.host", smtpHost);//指定SMTP服务器        props.put("mail.transport.protocol", "smtp");        Session mailSession = Session.getDefaultInstance(props);        mailSession.setDebug(true);//是否在控制台显示debug信息         // Step 2:  Construct the message        System.out.println("Constructing message -  from=" + from + "  to=" + to);        InternetAddress fromAddress = new InternetAddress(from);        InternetAddress toAddress = new InternetAddress(to);         MimeMessage testMessage = new MimeMessage(mailSession);        testMessage.setFrom(fromAddress);        testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);        testMessage.setSentDate(new java.util.Date());        testMessage.setSubject(MimeUtility.encodeText(subject,"gb2312","B"));         testMessage.setContent(messageText, "text/html;charset=gb2312");        System.out.println("Message constructed");         // Step 3:  Now send the message        Transport transport = mailSession.getTransport("smtp");        transport.connect(smtpHost, "webmaster", "password");        transport.sendMessage(testMessage, testMessage.getAllRecipients());        transport.close();         System.out.println("Message sent!");    }     public static void main(String[] args) {         String smtpHost = "localhost";        String from = "webmaster@mymail.com";        String to = "mfc42d@sohu.com";        String subject = "html邮件测试"; //subject javamail自动转码         StringBuffer theMessage = new StringBuffer();        theMessage.append("<h2><font color=red>这倒霉孩子</font></h2>");        theMessage.append("<hr>");        theMessage.append("<i>年年失望年年望</i>");         try {            SendHtmlMail.sendMessage(smtpHost, from, to, subject, theMessage.toString());        }        catch (javax.mail.MessagingException exc) {            exc.printStackTrace();        }        catch (java.io.UnsupportedEncodingException exc) {            exc.printStackTrace();        }    }}邮件头(参见RFC822,RFC2047)只能包含US-ASCII字符。邮件头中任何包含非US-ASCII字符的部分必须进行编码,使其只包含US-ASCII字符。但是java mail可以根据JVM发送中文邮件自行编码,,用它自带的MimeUtility类的encodeText方法对中文信息进行编码也可以。邮件正文必须有charset=gb2312否则为Content-Type: text/html; charset=us-asciiContent-Transfer-Encoding: 7bit打开邮件为乱码,设置charset=gb2312后Content-Type: text/html;charset=gb2312Content-Transfer-Encoding: quoted-printable它不能用MimeUtility里的方法来编码。邮件正文的编码方式的信息是要放在Content-Transfer-Encoding这个邮件头参数中的,而MimeUtility里面的方法是将编码方式的信息放在编码后的正文内容中。所以如果你对正文也用MimeUtility进行处理,那么其他邮件程序就不会正常显示你编码的邮件,因为其他邮件软件如outlook,foxmail只会根据Content-Transfer-Encoding这个里面的信息来对邮件正文进行解码。  


阅读全文(6123) | 回复(1) | 编辑 | 精华
 


回复:使用javamail发送html邮件
原创空间,  软件技术

Ray(游客)发表评论于2007/1/8 15:24:54

不错,又学到了许多,因为刚刚有个朋友问我这事,还好这里可以给人家解释哦 谢谢了


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.311 second(s), page refreshed 144770800 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号