刚好我也在学习,网上找了些:
邮件群发:
收件人的地址设置为tomail i的形式,利用For循环向这些地址发送邮件,以实现群发的目的.
利用Address类设置邮件信息的收件人和发件人信息,在创建了邮件地址类后,通过message的setFrom()方法设置邮件的发件人,代码如下:
message.setFrom(from_mail);
设置收件人地址时使用setRecipient()方法设置收信人地址,代码如下:
message.setRecipient(type,address);
①.)Message.RecipientType.TO--发送.
使用JavaMail发送邮件需要用到mail.jar和activtion.jar两个包.
该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人.下面是具体的代码:
package?cn.cgw.util.mail;?
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.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;?
public?class?Mail?{?
private?MimeMessage?mimeMsg;?//MIME邮件对象?
private?Session?session;?//邮件会话对象?
private?Properties?props;?//系统属性?
private?boolean?needAuth?=?false;?//smtp是否需要认证?
//smtp认证用户名和密码?
private?String?username;?
private?String?password;?
private?Multipart?mp;?//Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象?
/**?
*?Constructor?
*/?
public?Mail(String?smtp){?
setSmtpHost(smtp);?
createMimeMessage();?
}?
*?设置邮件发送服务器?
public?void?setSmtpHost(String?hostName)?{?
System.out.println("设置系统属性:mail.smtp.host?=?"+hostName);?
if(props?==?null)?
props?=?System.getProperties();?//获得系统属性对象?
props.put("mail.smtp.host",hostName);?//设置SMTP主机?
*?创建MIME邮件对象?
public?boolean?createMimeMessage()?
{?
try?{?
System.out.println("准备获取邮件会话对象!");?
session?=?Session.getDefaultInstance(props,null);?//获得邮件会话对象?
catch(Exception?e){?
System.err.println("获取邮件会话对象时发生错误!"+e);?
return?false;?
System.out.println("准备创建MIME邮件对象!");?
mimeMsg?=?new?MimeMessage(session);?//创建MIME邮件对象?
mp?=?new?MimeMultipart();?
return?true;?
}?catch(Exception?e){?
System.err.println("创建MIME邮件对象失败!"+e);?
}??
*?设置SMTP是否需要验证?
public?void?setNeedAuth(boolean?need)?{?
System.out.println("设置smtp身份认证:mail.smtp.auth?=?"+need);?
if(props?==?null)?props?=?System.getProperties();?
if(need){?
props.put("mail.smtp.auth","true");?
}else{?
props.put("mail.smtp.auth","false");?
*?设置用户名和密码?
public?void?setNamePass(String?name,String?pass)?{?
username?=?name;?
password?=?pass;?
*?设置邮件主题?
public?boolean?setSubject(String?mailSubject)?{?
System.out.println("设置邮件主题!");?
try{?
mimeMsg.setSubject(mailSubject);?
catch(Exception?e)?{?
System.err.println("设置邮件主题发生错误!");?
*?设置邮件正文?
public?boolean?setBody(String?mailBody)?{?
BodyPart?bp?=?new?MimeBodyPart();?
bp.setContent(""+mailBody,"text/html;charset=GBK");?
mp.addBodyPart(bp);?
System.err.println("设置邮件正文时发生错误!"+e);?
*?添加附件?
public?boolean?addFileAffix(String?filename)?{?
System.out.println("增加邮件附件:"+filename);?
FileDataSource?fileds?=?new?FileDataSource(filename);?
bp.setDataHandler(new?DataHandler(fileds));?
bp.setFileName(fileds.getName());?
System.err.println("增加邮件附件:"+filename+"发生错误!"+e);?
*?设置发信人?
public?boolean?setFrom(String?from)?{?
System.out.println("设置发信人!");?
mimeMsg.setFrom(new?InternetAddress(from));?//设置发信人?
}?catch(Exception?e)?{?
*?设置收信人?
public?boolean?setTo(String?to){?
if(to?==?null)return?false;?
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));?
*?设置抄送人?
public?boolean?setCopyTo(String?copyto)?
if(copyto?==?null)return?false;?
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));?
catch(Exception?e)?
{?return?false;?}?
*?发送邮件?
public?boolean?sendOut()?
mimeMsg.setContent(mp);?
mimeMsg.saveChanges();?
System.out.println("正在发送邮件....");?
Session?mailSession?=?Session.getInstance(props,null);?
Transport?transport?=?mailSession.getTransport("smtp");?
transport.connect((String)props.get("mail.smtp.host"),username,password);?
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));?
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));?
//transport.send(mimeMsg);?
System.out.println("发送邮件成功!");?
transport.close();?
System.err.println("邮件发送失败!"+e);?
*?调用sendOut方法完成邮件发送?
public?static?boolean?send(String?smtp,String?from,String?to,String?subject,String?content,String?username,String?password)?{?
Mail?theMail?=?new?Mail(smtp);?
theMail.setNeedAuth(true);?//需要验证?
if(!theMail.setSubject(subject))?return?false;?
if(!theMail.setBody(content))?return?false;?
if(!theMail.setTo(to))?return?false;?
if(!theMail.setFrom(from))?return?false;?
theMail.setNamePass(username,password);?
if(!theMail.sendOut())?return?false;?
*?调用sendOut方法完成邮件发送,带抄送?
public?static?boolean?sendAndCc(String?smtp,String?from,String?to,String?copyto,String?subject,String?content,String?username,String?password)?{?
if(!theMail.setCopyTo(copyto))?return?false;?
*?调用sendOut方法完成邮件发送,带附件?
public?static?boolean?send(String?smtp,String?from,String?to,String?subject,String?content,String?username,String?password,String?filename)?{?
if(!theMail.addFileAffix(filename))?return?false;?
*?调用sendOut方法完成邮件发送,带附件和抄送?
public?static?boolean?sendAndCc(String?smtp,String?from,String?to,String?copyto,String?subject,String?content,String?username,String?password,String?filename)?{?
}
你都没有设置邮件服务器....这句错误就是你没有设置邮件服务器或者你的用户名密码不正确
下面是我原来写的代码请参考:
首先是邮件模板的读取工具类
[java]?view?plaincopy
package?gamutsoft.mail.test;?
import?java.io.BufferedReader;?
import?java.io.File;?
import?java.io.FileInputStream;?
import?java.io.FileNotFoundException;?
import?java.io.IOException;?
import?java.io.InputStreamReader;?
public?class?ReadHTML?{?
//public?static?void?main(String[]?args)?{?
//?TODO?Auto-generated?method?stub?
public?static?String?reMailString(){?
//String?info="";?
StringBuffer?buff=new?StringBuffer();?
InputStreamReader?in=null;?
BufferedReader?br=null;?
File?file=new?File(path);?
in=new?InputStreamReader(new?FileInputStream(file));?
br=new?BufferedReader(in);?
String?line=null;?
while((line=br.readLine())?!=?null){?
//System.out.println(line);?
buff.append(line).append("\n");?
}?catch?(FileNotFoundException?e)?{?
//?TODO?Auto-generated?catch?block?
e.printStackTrace();?
}?catch?(IOException?e)?{?
}finally{?
if(in!=null){?
in.close();?
if(br!=null){?
br.close();?
return?buff.toString();?
邮件的html模板:
[html]?view?plaincopy
html?
head?
/head?
body?
a?href=""网易/a?
br?
欢迎光临,呵呵呵呵呵呵呵呵额?
十分感谢?
/html?
邮件发送类:这里的邮箱是为了自己的隐私我乱写了下,如果测试的话还得填写正确的
import?java.io.UnsupportedEncodingException;?
import?java.util.Date;?
import?javax.mail.Authenticator;?
import?javax.mail.MessagingException;?
public?class?MailTest1?{?
public?static?void?send()?throws?MessagingException,?UnsupportedEncodingException?{?
String?info=ReadHTML.reMailString();?
//邮件服务器?
//发件人?
//收件人?
//抄送人?
//邮件会话属性?
//Properties?p=System.getProperties();?
Properties?p=new?Properties();?
p.put("mail.smtp.host",?host);?
/*?
p.put("mail.smtp.auth",?"true");?
//创建一个密码验证器?
Authenticator?auth?=?new?MyAuthenticator(username,?password);?
//获得Session?
Session?session=Session.getDefaultInstance(p,auth);?
//////////////////sesion获得Transprot方法?
Session?session=Session.getDefaultInstance(p,null);?
session.setDebug(true);?
/////////////////////?
//创建Message信息?
MimeMessage?message=new?MimeMessage(session);?
//创建邮件发送者地址?
Address?fromAD?=?new?InternetAddress(from,"李建勋");?
//nternetAddress(from)?
//设置邮件发送者?
message.setFrom(fromAD);?
//创建邮件的接收地址?
Address?toAD?=?new?InternetAddress(to);?
//创建抄送人数组?
Address?toCAD1=new?InternetAddress(toCC1);?
//设置邮件的接收地址?
message.setRecipient(Message.RecipientType.TO,toAD);?
message.addRecipients(Message.RecipientType.CC,toCs?);?
//设置发送时间?
message.setSentDate(new?Date());?
//设置主题?
//设置消息正文,文本??
message.setText("Welcome?To?JavaMail");?
//设置HTML内容?
//?MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象??
Multipart?mainPart?=?new?MimeMultipart();?
//创建一个包含HTML内容的MimeBodyPart?
BodyPart?body=new?MimeBodyPart();?
//设置html内容?
//将MimeMultipart设置为邮件内容?
mainPart.addBodyPart(body);?
message.setContent(mainPart);?
///////////////////////sesion获得Transprot?
Transport?transport=session.getTransport("smtp");?
transport.connect(host,?username,?password);?
transport.sendMessage(message,message.getAllRecipients());?
//////////////////////?
//?Transport.send(message);?
public?static?void?main(String[]?args)?throws?MessagingException,?UnsupportedEncodingException?{?
send();?
此时此刻呢是MyAuthenticator类[java]?view?plaincopy
import?javax.mail.PasswordAuthentication;?
public?class?MyAuthenticator?extends?Authenticator{?
/*在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具?
*?有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()?
*?方法.并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类.?
*?*/?
String?username=null;?
String?password=null;?
public?MyAuthenticator(){?
public?MyAuthenticator(String?username,String?password){?
this.username=username;?
this.password=password;?
public?PasswordAuthentication?getPasswordAuthentication(){?
return?new?PasswordAuthentication(username,?password);?