用gmail邮箱写java程序在后台自动发送邮件的方法,如果是126邮箱,则不需要ssl验证和端口号,可惜最近申请的126邮箱都不支持邮件客户端接收和发送邮件了,所以选择了gmail.但是配置起来要麻烦一些,在网上找了许多,才实验成功。
import
java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SimpleMail ... {
/** *//** 服务器的域名*/
private String hostName = "";
/** *//** 服务器的端口号*/
private String port = "";
/** *//** 服务器是否需要ssl验证*/
private String needSSL = "";
/** *//** 发件人用户名*/
private String userName = "";
/** *//** 发件人密码*/
private String passWord = "";
public SimpleMail()...{}
public SimpleMail(String hostName,String port,String userName,String passWord,String needSSL)...{
this.hostName = hostName;
this.port = port;
this.userName = userName;
this.passWord = passWord;
this.needSSL = needSSL;
}
/** *//**
* 发送邮件
* @param fromAdd 发件人地址
* @param toAdd 收件人地址
* @param subject 邮件主题
* @param text 文本内容
*/
public void sentMail(String fromAdd,String toAdd,String subject,String text) throws Exception...{
Properties props = new Properties();
props.put("mail.transport.protocol","smtp");
if(needSSL!=null && needSSL.trim().equalsIgnoreCase("Y"))...{
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
if(port!=null && port.trim().length()>0)...{
props.setProperty("mail.smtp.socketFactory.port", port);
}
}else...{
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
}
if(port!=null && port.trim().length()>0)
props.setProperty("mail.smtp.port", port);
props.put("mail.smtp.host",hostName);
props.put("mail.smtp.auth", "true");
Session mailSession = Session.getDefaultInstance(props, new ForcedAuthenticator(userName,passWord));
Message msg = new MimeMessage(mailSession);
InternetAddress[] toAddress = InternetAddress.parse(toAdd,false);
msg.setRecipients(Message.RecipientType.TO, toAddress);
msg.setSubject(subject);
msg.setFrom(new InternetAddress(fromAdd));
msg.setText(text);
Transport.send(msg);
}
class ForcedAuthenticator extends Authenticator ...{
String userName = "";
String passWord = "";
public ForcedAuthenticator(String userName,String passWord)...{
this.userName = userName;
this.passWord = passWord;
}
public PasswordAuthentication getPasswordAuthentication() ...{
return new PasswordAuthentication(userName,passWord);
}
}
}
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SimpleMail ... {
/** *//** 服务器的域名*/
private String hostName = "";
/** *//** 服务器的端口号*/
private String port = "";
/** *//** 服务器是否需要ssl验证*/
private String needSSL = "";
/** *//** 发件人用户名*/
private String userName = "";
/** *//** 发件人密码*/
private String passWord = "";
public SimpleMail()...{}
public SimpleMail(String hostName,String port,String userName,String passWord,String needSSL)...{
this.hostName = hostName;
this.port = port;
this.userName = userName;
this.passWord = passWord;
this.needSSL = needSSL;
}
/** *//**
* 发送邮件
* @param fromAdd 发件人地址
* @param toAdd 收件人地址
* @param subject 邮件主题
* @param text 文本内容
*/
public void sentMail(String fromAdd,String toAdd,String subject,String text) throws Exception...{
Properties props = new Properties();
props.put("mail.transport.protocol","smtp");
if(needSSL!=null && needSSL.trim().equalsIgnoreCase("Y"))...{
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
if(port!=null && port.trim().length()>0)...{
props.setProperty("mail.smtp.socketFactory.port", port);
}
}else...{
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
}
if(port!=null && port.trim().length()>0)
props.setProperty("mail.smtp.port", port);
props.put("mail.smtp.host",hostName);
props.put("mail.smtp.auth", "true");
Session mailSession = Session.getDefaultInstance(props, new ForcedAuthenticator(userName,passWord));
Message msg = new MimeMessage(mailSession);
InternetAddress[] toAddress = InternetAddress.parse(toAdd,false);
msg.setRecipients(Message.RecipientType.TO, toAddress);
msg.setSubject(subject);
msg.setFrom(new InternetAddress(fromAdd));
msg.setText(text);
Transport.send(msg);
}
class ForcedAuthenticator extends Authenticator ...{
String userName = "";
String passWord = "";
public ForcedAuthenticator(String userName,String passWord)...{
this.userName = userName;
this.passWord = passWord;
}
public PasswordAuthentication getPasswordAuthentication() ...{
return new PasswordAuthentication(userName,passWord);
}
}
}