您的位置:首页 > 编程语言 > Java开发

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 javamail