JavaMail 简单发送邮件
2016-07-24 10:33
441 查看
功能说明:
从163邮箱向QQ邮箱发送简单只包含文字的邮件;
注意:
您的163需要设置:通过浏览器登录你的163邮箱->,点击设置->
mp.setSubType("mixed");
选择POP3/SMTP/IMAP->
->开启POP3/SMTP服务,根据提示,填写校验码,这里我已经开启后才编写的教程,故这个界面可能和你刚配置的不同,但操作很简单,你应该能明白.
这里的会设置你的授权码,这个授权码将是你的程序中用于用户验证所用到的,即PasswordAuthentication(userName, userPsw);中所用到的密码,由于程序相当与第三方登录,故这里使用的是授权码做为登录密码而不是你登录浏览器所用的那个密码(你也可以设置成一样的就是)
代码实现:
1:自定义的邮件所需要的信息类
package mailPackage; import java.util.Properties; public class MailSenderInfo { private String serverHost = null;//发送邮件的服务器类型 private String serverPort = null;//服务器的端口号 private String senderAddr = null;//发件人邮箱 private String receiverAddr = null;//收件人邮箱 private String userName = null;//用户帐号 private String userPsw = null;//授权码 private String messageSubject = null; private String messageContent = null; private String[] attachFiles = null; private boolean validate = false; public Properties getProperties() { Properties properties = new Properties(); properties.put("mail.smtp.host",this.serverHost); properties.put("mail.smtp.port", this.serverPort); properties.put("mail.smtp.auth", this.validate?"true":"false"); return properties; } public String getServerHost() { return serverHost; } public void setServerHost(String serverHost) { this.serverHost = serverHost; } public String getServerPort() { return serverPort; } publ 4000 ic void setServerPort(String serverPort) { this.serverPort = serverPort; } public String getSenderAddr() { return senderAddr; } public void setSenderAddr(String senderAddr) { this.senderAddr = senderAddr; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPsw() { return userPsw; } public void setUserPsw(String userPsw) { this.userPsw = userPsw; } public String getMessageSubject() { return messageSubject; } public void setMessageSubject(String messageSubject) { this.messageSubject = messageSubject; } public String getMessageContent() { return messageContent; } public void setMessageContent(String messageContent) { this.messageContent = messageContent; } public String[] getAttachFiles() { return attachFiles; } public void setAttachFiles(String[] attachFiles) { this.attachFiles = attachFiles; } public boolean isValidate() { return validate; } public String getReceiverAddr() { return receiverAddr; } public void setReceiverAddr(String receiverAddr) { this.receiverAddr = receiverAddr; } public void setValidate(boolean validate) { this.validate = validate; } }
2:继承类,用于用户验证
package mailPackage; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator { private String userName = null;//用户帐号 private String userPsw = null;//授权码 public MyAuthenticator() { // TODO Auto-generated constructor stub } public MyAuthenticator(String userName,String userPsw) { this.userName = userName; this.userPsw = userPsw; } @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub //return super.getPasswordAuthentication(); return new PasswordAuthentication(userName, userPsw); } }
3:自定义类,JavaMail的主要内容都在这
package mailPackage; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeMessage.RecipientType; import javax.net.ssl.SSLSessionBindingEvent; public class SimpleMailSender { public boolean sendTextMail(MailSenderInfo mInfo) { Properties pro = mInfo.getProperties();//会话属性 MyAuthenticator mAuthenticator = null; if(mInfo.isValidate()) {//如果需要身份验证,则创建一个密码验证器 mAuthenticator = new MyAuthenticator(mInfo.getUserName(), mInfo.getUserPsw()); }//根据会话属性和密码验证器,创建一个session Session sendMailSession = Session.getDefaultInstance(pro, mAuthenticator); try { Message message = new MimeMessage(sendMailSession);//邮件的信息 message.setFrom(new InternetAddress(mInfo.getSenderAddr()));//邮件的发件人 message.setRecipient(RecipientType.TO, new InternetAddress(mInfo.getReceiverAddr()));//邮件的收件人 message.setSubject(mInfo.getMessageSubject());//邮件的主题 message.setSentDate(new Date());//邮件的时间 message.setText(mInfo.getMessageContent());//邮件的主要内容 System.out.println("before Transport"); Transport.send(message); System.out.println("after Transport"); return true; } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public boolean sendHtmlMail(MailSenderInfo mInfo) { MyAuthenticator mAuthenticator = null; Properties pro = mInfo.getProperties();//会话属性 if(mInfo.isValidate()) { // 如果需要身份认证,则创建一个密码验证器 mAuthenticator = new MyAuthenticator(mInfo.getUserName(),mInfo.getUserPsw()); } System.out.println(); // 根据邮件会话属性和密码验证器构造一个发送邮件的session Session sendMailSession = Session.getDefaultInstance(pro, mAuthenticator); try { Message message = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息 message.setFrom(new InternetAddress(mInfo.getSenderAddr()));//发件人 message.setRecipient(RecipientType.TO, new InternetAddress(mInfo.getReceiverAddr()));//收件人 message.setSentDate(new Date());//设置时间 message.setSubject(mInfo.getMessageSubject());//设置主题 Multipart multipart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 BodyPart html = new MimeBodyPart(); html.setContent(mInfo.getMessageContent(), "text/html;charset=utf-8"); multipart.addBodyPart(html); message.setContent(multipart);// 将MiniMultipart对象设置为邮件内容 Transport.send(message); return true; } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } }
4:自定义主类,用于测试
package mailPackage; import java.util.Date; public class SendMail { public static void main(String[] args) { // TODO Auto-generated method stub MailSenderInfo mInfo = new MailSenderInfo(); mInfo.setServerHost("smtp.163.com"); mInfo.setServerPort("25");//设置端口号 mInfo.setValidate(true);//设置需要验证 mInfo.setUserName("18819472412");//用户名 mInfo.setUserPsw("XXXXXXXXXX");//用户密码,不是浏览器登录的那个密码,是授权码 mInfo.setSenderAddr("18819472412@163.com");//发件人地址 mInfo.setReceiverAddr("1477675362@qq.com");//收件人地址 mInfo.setMessageSubject("测试自动发邮件3Html");//邮件主题 String dataTime = new Date().toString(); mInfo.setMessageContent(dataTime+"\nHello world!\n Hello JavaMail");//邮件内容 SimpleMailSender sender = new SimpleMailSender(); System.out.println("before sendTextMail"); // if(sender.sendTextMail(mInfo)) { // System.out.println("邮件发送完毕"); // } else { // System.out.println("邮件发送失败"); // } if(sender.sendHtmlMail(mInfo)) { System.out.println("邮件发送完毕"); } else { System.out.println("邮件发送失败"); } } }
附:通过设置163邮箱向QQ邮箱发送邮件经测试,成功;但通过QQ邮箱向163邮箱发送邮件没有测试成功.
有一篇博文写的挺好:http://www.cnblogs.com/xdp-gacl/p/4216311.html
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树