JavaMail发送邮件的笔记及Demo
2016-01-22 14:18
543 查看
最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误:
![](http://images2015.cnblogs.com/blog/870109/201601/870109-20160122135926172-303350068.png)
网络上搜索解决方式,多次尝试后发现了问题,原来是我的163邮箱账号没有开启客户端授权,因此也就没有开启SMTP服务,这是无法用javamail程序作为发件人发送邮箱的,于是在设置里开始授权及服务之后,满心欢喜的再次运行,悲哀的是又报了另一个错误:
![](http://images2015.cnblogs.com/blog/870109/201601/870109-20160122140630718-273184437.png)
无奈再次开始调试,最后终于发现了问题,正如网友说的,因为你验证的邮箱用户名和你发送的时候添写的邮箱地址不一样,SMTP服务器驳回了你的请求,我在验证的时候使用的我自己的163邮箱,在设置发信人的时候,误把xxxxxx@163.com写成了xxxxxxx@qq.com(不能忍),改正过来以后,如愿以偿,终于可以发送邮件了,以下是代码和注释:
下面在介绍一下发送带附件的邮件需要修改的代码,只需要将上面的:
替换成下面的代码即可:
![](http://images2015.cnblogs.com/blog/870109/201601/870109-20160122135926172-303350068.png)
网络上搜索解决方式,多次尝试后发现了问题,原来是我的163邮箱账号没有开启客户端授权,因此也就没有开启SMTP服务,这是无法用javamail程序作为发件人发送邮箱的,于是在设置里开始授权及服务之后,满心欢喜的再次运行,悲哀的是又报了另一个错误:
![](http://images2015.cnblogs.com/blog/870109/201601/870109-20160122140630718-273184437.png)
无奈再次开始调试,最后终于发现了问题,正如网友说的,因为你验证的邮箱用户名和你发送的时候添写的邮箱地址不一样,SMTP服务器驳回了你的请求,我在验证的时候使用的我自己的163邮箱,在设置发信人的时候,误把xxxxxx@163.com写成了xxxxxxx@qq.com(不能忍),改正过来以后,如愿以偿,终于可以发送邮件了,以下是代码和注释:
/** * javamail发邮件 * @throws Exception * @throws AddressException */ @Test public void sendMailDemo() throws Exception{ /** * 1.得到session */ // Properties是Session的属性对象,用于封装针对SMTP的一些常用属性 Properties props=new Properties(); //设置smtp服务器地址 props.setProperty("mail.host", "smtp.163.com"); //设置SMTP服务器是否需要用户认证,默认为false,设为true props.setProperty("mail.smtp.auth", "true"); Authenticator auth=new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { //注意:下面的登录用户名是@前边的内容,如果你的账号是haha@163.com,只需要输入haha return new PasswordAuthentication("邮件服务器登录用户名", "登录密码"); } }; Session session = Session.getInstance(props,auth); /** * 2.创建MimeMessage */ MimeMessage msg=new MimeMessage(session); //设置发件人 msg.setFrom(new InternetAddress("发送方邮箱账号")); //设置收件人 msg.setRecipients(RecipientType.TO,"接受方邮箱账号"); //设置抄送 msg.setRecipients(RecipientType.CC,"邮箱账号"); //设置主题 msg.setSubject("javamail发送邮件Demo"); //设置内容 msg.setContent("我是邮件","text/html;charset=utf-8"); /** * 3.发送 */ Transport.send(msg); }
下面在介绍一下发送带附件的邮件需要修改的代码,只需要将上面的:
msg.setContent("我是邮件","text/html;charset=utf-8")
替换成下面的代码即可:
MimeMultipart list=new MimeMultipart(); //创建MimebodtPart MimeBodyPart part1=new MimeBodyPart(); part1.setContent("这是一封包含附件的垃圾邮箱","text/html;charset=utf-8"); list.addBodyPart(part1); //创建MimebodtPart MimeBodyPart part2=new MimeBodyPart(); //设置附件内容 part2.attachFile(new File("e:/照片/me.jpg")); //设置显示的文件名 顺便解决乱码问题 part2.setFileName(MimeUtility.encodeText("哎哟,不错哦.jpg")); list.addBodyPart(part2); msg.setContent(list);
相关文章推荐
- Spring获取单例getSingleton(1)
- Java基础-了解Hashtable
- 【spring源代码分析】--Bean的解析与注冊
- Hive学习1_hive配置遇到的问题:Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%
- JAVA设计模式:组合模式
- eclipse快捷键汇总
- java基础篇--01<基础>
- java.lang.IllegalStateException: ScrollView can host only one direct child
- JavaEE 之 JPA 常见异常处理办法汇总
- 关于struts2的那点事
- static关键字--java
- Vector and ArrayList in Java
- Java 方法
- 手动编译JAVA类
- JavaSE001_String类总结之构造器和常用方法
- android studio 导入eclipse遇到的相关问题
- java ftp相关的异常汇总
- Spring+MVC项目发布停止
- java前台传参json,后台用map或者实体对象接收
- java.lang.RuntimeException: JPedal Trial has now expired