基于javamail简单实现邮件发送和相关问题的解决
2017-03-20 17:56
806 查看
在日常生活中,会比较多的使用到邮件,无论生活还是工作。有QQ邮箱,163邮箱等等。那邮件发送和接受那也会有协议的吧,对下面是常见邮件协议:
SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;
POP3:用于接收电子邮件的标准协议;
IMAP:互联网消息协议,是POP3的替代协议。
代码实现会使用到那些关键类:
Properties类:配置相关参数
Session类:会话对象
Message类:邮件类
Address类:地址类
Authenticator:认证类
Transport:运送类
具体代码实现如下:
编写邮件发送的时候会出现这样的情况:
1、Unrecognized SSL message, plaintext connection。
2、530 Error: A secure connection is requiered(such as ssl)
要么是验证码过期了 ,要么是自己没有设置SSLSocketFactory类在配置文件中,因为QQ邮箱需要SSL而163不用。
补充
环境:
MyEclipse和JDK1.6环境,加入JavaMail1.4.3的jar包。
运行测试报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 。
原因:
MyEclipse10.7的javaee.jar中的mail包与JavaMail包有冲突。
解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录,然后加入mail.jar和activition.jar
SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;
POP3:用于接收电子邮件的标准协议;
IMAP:互联网消息协议,是POP3的替代协议。
代码实现会使用到那些关键类:
Properties类:配置相关参数
Session类:会话对象
Message类:邮件类
Address类:地址类
Authenticator:认证类
Transport:运送类
具体代码实现如下:
import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * 实现一个email发送功能 * @author chenjingbin * */ public class EmailDemo01 { public static void main(String[] args) { try { new EmailDemo01().createSession(); } catch (Exception e) { // TODO Auto-generated catch block System.out.println("出现错误了"); } } public void createSession() { //创建配置类,然后把需要的参数加入,这里使用qq邮箱去发送,那就会使用到SSL Properties properties = new Properties(); properties.put("mail.host", "smtp.qq.com"); properties.put("mail.transport.protocol", "smtp"); properties.put("mail.smtp.auth", "true"); //QQ邮箱需要配置下面参数 properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.socketFactory.port", "465"); //获取会话对象,需要去实现一个继承Authenticator的类,一个是账号,一个是你去QQ邮箱里面设置获取的验证码 Session session = Session.getInstance(properties, new MyAuthenticator("3248412693@qq.com", "**************")); //启动调试 session.setDebug(true); //创建消息类,把会话对象传进去 MimeMessage message = new MimeMessage(session); try { //设置发送人地址 message.setFrom(new InternetAddress("3248412693@qq.com")); //设置发送人地址和接受类型 message.addRecipient(Message.RecipientType.TO, new InternetAddress("764024755@qq.com")); //设置主题 message.setSubject("你好", "utf-8"); //设置发送时间 message.setSentDate(new Date()); //设置发送内容和格式 message.setContent("曾经有一段真挚的爱情放在我的面前,我没有珍惜。直到失去我才追悔莫急。如果上天再给我一次机会的话,我一定会对那个女孩说三个字“我爱你”。如果一定要给这个承诺加上一个期限的话,我希望是“一万年”。", "text/html;charset=utf-8"); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } //发送邮件 try { //通过会话对象去获得传输对象 Transport transport = session.getTransport("smtp"); //连接用户 transport.connect("smtp.qq.com", "3248412693@qq.com", "*****************"); //发送 transport.send(message); System.out.println("发送成功"); } catch (MessagingException e) { // TODO Auto-generated catch block System.out.println("发送失败"); e.printStackTrace(); } } } //------------------------------------------------ import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator { private String usernameString; private String passwordString; public MyAuthenticator(String usernameString, String passwordString) { this.usernameString = usernameString; this.passwordString = passwordString; } @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub return new PasswordAuthentication(usernameString, passwordString); } }
编写邮件发送的时候会出现这样的情况:
1、Unrecognized SSL message, plaintext connection。
2、530 Error: A secure connection is requiered(such as ssl)
要么是验证码过期了 ,要么是自己没有设置SSLSocketFactory类在配置文件中,因为QQ邮箱需要SSL而163不用。
补充
环境:
MyEclipse和JDK1.6环境,加入JavaMail1.4.3的jar包。
运行测试报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 。
原因:
MyEclipse10.7的javaee.jar中的mail包与JavaMail包有冲突。
解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录,然后加入mail.jar和activition.jar
相关文章推荐
- 基于JavaMail的Java实现简单邮件发送功能
- Java发送邮件简单实现以及问题的解决
- PHP基于curl post实现发送url及相关中文乱码问题解决方法
- JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件)
- javaMail邮件发送的简单实现
- JAVA邮件发送的简单实现,使用javamail通过smtp协议发信
- 手把手教你用java实现邮件发送及常见问题解决
- 解决JavaMail发送邮件异常问题
- 用javamail实现一个简单的邮件发送
- Java基于JavaMail实现向QQ邮箱发送邮件
- Java 基于JavaMail实现向QQ邮箱发送邮件(未测试)
- javamail发送邮件乱码问题解决
- JavaMail、Commons Email发送邮件 出现结果后到的文件是Base64的问题的解决办法
- Java基于JavaMail实现向QQ邮箱发送邮件
- 基于avd7181c解决视频输入效果差的问题<四>---android显示相关实现调试手记
- javamail实现发送邮件并简单实现观察者模式
- PHP实现发送邮件的方法(基于简单邮件发送类)
- Qt5.4.2实现一个简单的浏览器 及相关问题的解决
- 基于JavaMail的Java邮件发送:简单邮件发送
- Java 基于JavaMail实现向QQ邮箱发送邮件