网上有很多的文章关于Java Mail发送邮件的问题,但是也有很多的文章没有说到发送邮箱的身份验证,还有一些关于群发的文章,也没有提到群发频率过快被视为垃圾邮件,或者根本就发布出去,应该邮件服务商把的连接断开了。
我这里用了四个发送邮箱,轮流发送,每发送一封停5000ms,这样被视为垃圾邮箱的概率大大降低,发送邮箱越多,越容易发送成功。
我这里用了四个发送邮箱,轮流发送,每发送一封停5000ms,这样被视为垃圾邮箱的概率大大降低,发送邮箱越多,越容易发送成功。
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class mail {
public static void main(String[] args) {
String recipient = "ypz1988@gmail.com";
int delay = 5000;
String subject = "JavaMail";
String m_body = "<html><body>测试群发,请点击<a href='http://www.baidu.com/'>百度</a></body></html>";
boolean f = sendMail(subject,m_body,recipient);
if(f==true){
System.out.println("发送成功");
}else{
System.out.println("发送失败");
}
for(int i=1;i<=50;i++){
subject = "JavaMail:"+i;
boolean f2 = sendMail(subject,m_body,recipient);
if(f2==true){
System.out.println("发送成功"+i);
}else{
System.out.println("发送失败"+i);
}
try{
Thread.sleep(delay);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static boolean sendMail(String subject, String m_body,String recipient) {
String[] usernames={"***@servyou.com.cn","***@163.com","***@163.com","***@gmail.com"};
String[] hosts = {"mail.servyou.com.cn","smtp.163.com","smtp.163.com","smtp.gmail.com"};
Random random = new Random();
int r = random.nextInt(4);
String host = hosts[r];
String port = "25";
String username = usernames[r];
System.out.println(r+" : "+username );
String password = "*****";
String type = "text/html;charset='gb2312'"; // 文本类型默认为text/plain
try {
Properties props = System.getProperties(); // 创建系统属性对象
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
PopupAuthenticator authenticator = new PopupAuthenticator();// 创建一个过程对象
authenticator.performCheck(username, password);
javax.mail.Session sess = javax.mail.Session.getInstance(
props, authenticator);
MimeMessage msg = new MimeMessage(sess); // 创建邮件对象
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setFrom(new InternetAddress(username));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
MimeMultipart content = new MimeMultipart(); // 创建邮件体对象
MimeBodyPart part = new MimeBodyPart(); // 创建文本部分对象
part.setText(m_body);
part.setHeader("Content-Type", type);
content.addBodyPart(part);
msg.setContent(content); // 添加文本至邮件中
msg.saveChanges();
Transport trans = sess.getTransport(); // 创建发送对象
Transport.send(msg);
trans.close();
sess = null;
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
}
class PopupAuthenticator extends Authenticator {
String username = null;
String password = null;
public PopupAuthenticator() {
}
public PasswordAuthentication performCheck(String user, String pass) {
username = user;
password = pass;
return getPasswordAuthentication();
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}