Java通过QQ邮箱发送邮件
使用了javamail1_4_5的包。测试QQ邮箱可用。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
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.MimeUtility;
import com.sun.mail.util.MailSSLSocketFactory;
/**
* 邮件发送工具,可以群发,抄送,添加附件
*
* @author JW.XIN
*
*/
public class MailTool {
/**
* 设置debug模式
*/
private boolean debug = false;
/**
* 发件人昵称
*/
private String personalName = "JW.XIN";
/**
* 发送邮件
*
* @param host
* 邮件发送服务器
* @param subject
* 主题
* @param userName
* 用户名
* @param pwd
* 密码
* @param to
* 收件人,多个用英文逗号隔开
* @param copyto
* 抄送,多个用英文逗号隔开
* @param text
* 正文
* @param fileName
* 附件详细路径数组
*/
public void send(String host, String subject, String userName, String pwd,
String to, String copyto, String text, String[] fileName) {
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
MailSSLSocketFactory sf;
try {
sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
} catch (GeneralSecurityException e1) {
e1.printStackTrace();
}
try {
PopupAuthenticator auth = new PopupAuthenticator(userName, pwd);
Session session = Session.getInstance(props, auth);
session.setDebug(debug);
MimeMultipart mp = new MimeMultipart();// Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
MimeMessage message = new MimeMessage(session);
Address addressFrom = new InternetAddress(userName, personalName);
if (subject == null)
subject = "无主题";
message.setSubject(subject);
message.setFrom(addressFrom);
message.addRecipients(Message.RecipientType.TO, InternetAddress
.parse(to));
if (copyto != null && !copyto.equals("")) {// 如果有抄送
message.addRecipients(Message.RecipientType.CC, InternetAddress
.parse(copyto));
}
BodyPart bpText = new MimeBodyPart();
bpText.setContent(text, "text/html;charset=GBK");
mp.addBodyPart(bpText);
// message.setText(text);
if (fileName != null && fileName.length > 0) {// 如果有附件
try {
for (String str : fileName) {
if (str == null || str.equals(""))
continue;
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(str);
bp.setDataHandler(new DataHandler(fileds));
bp
.setFileName(MimeUtility.encodeText(fileds
.getName()));
mp.addBodyPart(bp);
}
} catch (Exception e) {
System.err.println("增加邮件附件:" + fileName + "发生错误!" + e);
e.printStackTrace();
}
}
message.setContent(mp);
message.saveChanges();
Transport transport = session.getTransport("smtp");
String mailuser = userName.split("@")[0];
transport.connect(host, mailuser, pwd);
Transport.send(message);
transport.close();
System.out.println("mail send success");
} catch (Exception e) {
System.err.println("mail send fail");
e.printStackTrace();
}
}
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public String getPersonalName() {
return personalName;
}
public void setPersonalName(String personalName) {
if (personalName == null)
return;
this.personalName = personalName;
}
}