Java code
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class zztest {
public static void main(String[] args) {
String smtphost = "smtp.qq.com"; // 发送邮件服务器
String user = "32729223"; // 邮件服务器登录用户名
String password = "cctv"; // 邮件服务器登录密码
String from = "32729223@qq.com"; // 发送人邮件地址
String to = "jxerjames@163.com"; // 收件人邮件地址
String subject = "测试test!"; // 邮件标题
String body = "测试test!"; // 邮件内容
// 以下为发送程序,用户无需改动
try {
Properties props = new Properties();
props.put("mail.smtp.host", smtphost);
props.put("mail.smtp.auth","true");
Session ssn = Session.getInstance(props, null);
MimeMessage message = new MimeMessage(ssn);
InternetAddress fromAddress = new InternetAddress(from);
message.setFrom(fromAddress);
InternetAddress toAddress = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject("UTF-8");
message.setText(body);
Transport transport = ssn.getTransport("smtp");
transport.connect(smtphost, user, password);
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
//transport.send(message);
transport.close();
} catch(Exception m) {
m.printStackTrace();
}
}我来帮他解答
2009-4-16 16:14
满意回答
可能是版本问题! 如果你用的MyEclipse的话右键Build Path->config build path->add library J2EE1.4或者上网下载mail.jar
你的代码没问题!或者给你个例子:
package com.mail;
import java.util.Date;
/**
* 邮件类
* @author Dave zhf_0630@126.com
* 2009-03-26
*/
public class Email{
public final static String TO="xxx@xxx.com";
public final static String FROM="xxx@xxx.com";
public final static String CC="xxx@nxxx.com";
public final static String BCC="xxx@nxxx.com";
public final static String Email_Subject="Test Email With JavaMail";
public final static String Email_Header="This Is Email Header";
public final static String Email_Body="This Is Email Body";
public final static String Email_Host="smtp.xxx.com";
public Date sendDate=null;
public Email(){}
}
package com.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 邮件服务器认证
* @author Dave zhf_0630@126.com
* 2009-03-26
*/
public class MailAuthenticator extends Authenticator {
private final static String username="xxx";
private final static String password="xxx";
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username,password);
}
}
package com.mail;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
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;
/**
* 发送邮件
*
* @author Dave zhf_0630@126.com
* 2009-03-26
*/
public class SendEmail {
/**
* 发送普通邮件
*
* @throws Exception
*/
public void doSendNormalMail() throws Exception {
Properties prop = new Properties(); // 获取系统环境
Authenticator auth = new MailAuthenticator(); // 邮件服务器认证
prop.put("mail.smtp.host", Email.Email_Host);
prop.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(prop, auth);// 设置对话和邮件服务器进行通讯
Message message = new MimeMessage(session);
/*
* 设置邮件对象
*/
try {
message.setSubject(Email.Email_Subject + "Normal Email"); // 设置邮件主题
message.setContent("Hello", "text/plain"); // 设置邮件格式
message.setText(Email.Email_Body); // 设置邮件体
message.setHeader("Header:", Email.Email_Header); // 设置邮件标题
message.setSentDate(new Date()); // 设置发送时间
Address address = new InternetAddress(Email.FROM, "Dave"); // 设置发信人地址
message.setFrom(address);
/*
* 设置多个发件人地址
*
* Address address[]={new InternetAddress("","") new
* InternetAddress("","")}; message.addFrom(address);
*/
Address toAddress = new InternetAddress(Email.TO); // 设置接收人地址
message.setRecipient(Message.RecipientType.TO, toAddress);
// 设置多个收件人地址
// message.addRecipient(Message.RecipientType.TO,new
// InternetAddress("zhf_0630@126.com"));
message.saveChanges();
System.out.println("sendNormalEmail() 开始发送邮件……");
Transport.send(message); // 发送邮件
System.out.println("发送成功!");
} catch (MessagingException e) {
System.out.println("发送失败!");
e.printStackTrace();
}
}
/**
* 发送带附件的邮件
* @throws UnsupportedEncodingException
*/
public void sendEmailWithAttachment() throws UnsupportedEncodingException {
Properties prop = new Properties();
prop.put("mail.smtp.host", Email.Email_Host);
prop.put("mail.smtp.auth", "true");
Authenticator auth = new MailAuthenticator();
Session session = Session.getDefaultInstance(prop, auth);
Message message = new MimeMessage(session);
try {
message.setSubject(Email.Email_Subject + "Email With Accatchment");// 设置邮件主题
message.setContent("Hello", "text/plain"); // 设置邮件格式
message.setText(Email.Email_Body); // 设置邮件体
message.setHeader("Header:", Email.Email_Header); // 设置邮件标题
message.setSentDate(new Date()); // 设置发送时间
Address address = new InternetAddress(Email.FROM, "Dave"); // 设置发信人地址
message.setFrom(address);
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("bodypart");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("E:\\test.xls");
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("E:\\test.xls");
multipart.addBodyPart(messageBodyPart);// Put parts in
message.setContent(multipart);
Address toAddress = new InternetAddress(Email.TO);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.saveChanges();
System.out.println("sendEmailWithHtml() 开始发送邮件……");
Transport.send(message);
System.out.println("发送成功!");
} catch (MessagingException e) {
System.out.println("发送失败!");
e.printStackTrace();
}
}
/**
* 发送带html的邮件
*
* @throws UnsupportedEncodingException
*/
public void sendEmailWithHtml() throws UnsupportedEncodingException {
Properties prop = new Properties();
Authenticator auth = new MailAuthenticator();
prop.put("mail.smtp.host", Email.Email_Host);
prop.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(prop, auth);
Message message = new MimeMessage(session);
String htmlText = "<h1>Hello</h1>"
+ "<a href=\"http://news.sina.com.cn\" target=\"blank\">点击连接</a>";
System.out.println(htmlText);
try {
message.setSubject(Email.Email_Subject + "Email With Html");
message.setContent(htmlText + Email.Email_Body,
"text/html;charset=gb2312");
// message.setText(Email.Email_Body);
message.setSentDate(new Date());
Address address = new InternetAddress(Email.FROM, "Dave");
Address toAddress = new InternetAddress(Email.TO);
message.setFrom(address);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.saveChanges();
System.out.println("sendEmailWithHtml() 开始发送邮件……");
Transport.send(message);
System.out.println("发送成功!");
} catch (MessagingException e) {
System.out.println("发送失败!");
e.printStackTrace();
}
}
/**
* 测试函数
*
* @param args
*/
public static void main(String args[]) {
try {
// 发送普通邮件
new SendEmail().doSendNormalMail();
// 发送带html的邮件
new SendEmail().sendEmailWithHtml();
// 发送带附件的邮件
new SendEmail().sendEmailWithAttachment();
} catch (Exception e) {
e.printStackTrace();
}
}
}
网上申请业务需要每月向所有代理机构发送对账单明细,但Java批量发送电子邮件可能被第三方邮件服务器当做垃圾邮件拦截。google一把,网友提示主要注意以下几点,摘抄备忘:
1、一个账号发送大量邮件
2、相同IP短期发送大量邮件
3、发送邮件速度太快
4、邮件导出链接数太多
5、软件设置过度
解决方案:
1、建立足够账号,每个账号每天发送数量最好不超过。控制每个账号发送数量设置:按顺序发送,每发送一封更换发件人。
2、使用几个不同代理服务器发件。设置:每发送100封更换1个代理,如果代理发送失败,使用非代理模式重发1次。
3、邮件发送速度设置为要结合代理服务器而定,代理服务器越多,发送速度可越快。太快被拦截,太慢降低效率。
4、邮件不宜导出链接数太多。
5、合理设置软件参数。线程不超过代理服务器数量,发件箱不要隐藏,标题加上随机字符串,发件人姓名使用随机字符串,添加统计代码【这一点比较重要,如主题加上代理人的名称,不要重复。】
--------------------------------------------------
听说在主题前加RE:这样的邮件一般不会过滤的。。。
-------------------------------------------------------------
格式您发送的所有群发邮件的格式必须符合 RFC 2822 SMTP 标准,如果使用 HTML 格式,则必须符合 w3.org 标准。邮件应该使用"Precedence: bulk"标头字段来指示它们是群发邮件。如果尝试隐藏真实的邮件发件人或邮件中任何网络链接的真实目标网页,则可能会导致邮件无法递送。每封邮件的主题应当与正文内容相关,不应有误导之嫌。
--------------------------------------------------------------
1.不要发送同样的内容给过多的用户,就是发送的内容,最好根据不同的用户,选择不同的内容,比如邮件中附上用户的名字等。
2.同一时间不要集中发布邮件,如果你向同一个邮件服务器下的用户同一时间发送大量邮件,会直接被ban,目前gmail的限度不清楚,貌似qq邮件服务器的限度是同一时间发送同样的邮件给30个qq邮箱就会被ban。
3.你的邮箱的用户名和签名等最好规范,貌似这个也是gmail侦测的原则。
4.保证你的邮件内容不会被用户举报,gmail的筛选会参考用户的数据,如果你的邮件被举报过多,那么下一次你再发时,gmail就会参考用户的建议了。