javax.mail发送带附件的邮件代码
package com.dc.mail; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.*; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class SendMail { //定义发件人、收件人、SMTP服务器、用户名、密码、主题、内容等 private String displayName="DataCheck"; private String[] to; private String from; private String smtpServer= "smtp.163.com"; private String username; private String password; private String subject="DataCheckMail"; private String content; private boolean ifAuth; //服务器是否要身份认证 private Vector file = new Vector(); //用于保存发送附件的文件名的集合 private Log log = LogFactory.getLog(getClass()); /** * 设置SMTP服务器地址 */ public void setSmtpServer(String smtpServer){ this.smtpServer=smtpServer; } /** * 设置发件人的地址 */ public void setFrom(String from){ this.from=from; } /** * 设置显示的名称 */ public void setDisplayName(String displayName){ this.displayName=displayName; } /** * 设置服务器是否需要身份认证 */ public void setIfAuth(boolean ifAuth){ this.ifAuth=ifAuth; } /** * 设置E-mail用户名 */ public void setUserName(String username){ this.username=username; } /** * 设置E-mail密码 */ public void setPassword(String password){ this.password=password; } /** * 设置接收者 */ public void setTo(String[] to){ this.to=to; } /** * 设置主题 */ public void setSubject(String subject){ this.subject=subject; } /** * 设置主体内容 */ public void setContent(String content){ this.content=content; } /** * 该方法用于收集附件名 */ public void addAttachfile(String fname){ file.addElement(fname); } public SendMail(){ } /** * 初始化SMTP服务器地址、发送者E-mail地址、用户名、密码、接收者、主题、内容 */ public SendMail(String smtpServer,String from,String displayName,String username,String password,String[] to,String subject,String content){ this.smtpServer=smtpServer; this.from=from; this.displayName=displayName; this.ifAuth=true; this.username=username; this.password=password; this.to=to; this.subject=subject; this.content=content; } /** * 初始化SMTP服务器地址、发送者E-mail地址、接收者、主题、内容 */ public SendMail(String smtpServer,String from,String displayName,String[] to,String subject,String content){ this.smtpServer=smtpServer; this.from=from; this.displayName=displayName; this.ifAuth=false; this.to=to; this.subject=subject; this.content=content; } /** * 发送邮件 */ public void send(){ String filename=""; String message="邮件发送成功!"; Session session=null; Properties props = System.getProperties(); props.put("mail.smtp.host", smtpServer); if(ifAuth){ //服务器需要身份认证 props.put("mail.smtp.auth","true"); SmtpAuth smtpAuth=new SmtpAuth(username,password); session=Session.getDefaultInstance(props, smtpAuth); }else{ props.put("mail.smtp.auth","false"); session=Session.getDefaultInstance(props, null); } session.setDebug(true); Transport trans = null; try { Message msg = new MimeMessage(session); try{ Address from_address = new InternetAddress(from, displayName); msg.setFrom(from_address); }catch(java.io.UnsupportedEncodingException e){ e.printStackTrace(); } // 创建邮件的接收者地址,并设置到邮件消息中 Address[] address = new InternetAddress[to.length]; for (int i=0; i<to.length; i++) { address[i] = new InternetAddress(to[i]); } msg.setRecipients(Message.RecipientType.TO,address); msg.setSubject(subject); Multipart mp = new MimeMultipart(); MimeBodyPart mbp = new MimeBodyPart(); mbp.setContent(content.toString(), "text/html;charset=gb2312"); mp.addBodyPart(mbp); if(!file.isEmpty()){//有附件 Enumeration efile=file.elements(); while(efile.hasMoreElements()){ mbp=new MimeBodyPart(); filename=efile.nextElement().toString(); //选择出每一个附件名 FileDataSource fds=new FileDataSource(filename); //得到数据源 mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart mbp.setFileName(fds.getName()); //得到文件名同样至入BodyPart mp.addBodyPart(mbp); } file.removeAllElements(); } msg.setContent(mp); //Multipart加入到信件 msg.setSentDate(new Date()); //设置信件头的发送日期 //发送信件 msg.saveChanges(); trans = session.getTransport("smtp"); trans.connect(smtpServer, username, password); trans.sendMessage(msg, msg.getAllRecipients()); trans.close(); log.debug("邮件发送成功!"); }catch(AuthenticationFailedException e){ message="邮件发送失败!错误原因:身份验证错误!"; log.error(message+e.getMessage()); }catch (MessagingException e) { message="邮件发送失败!错误原因:\n"+e.getMessage(); log.error(message+e.getMessage()); Exception ex = null; if ((ex = e.getNextException()) != null) { log.error(e.getNextException()); } } } public static void main(String[] args) { SendMail sendMail=new SendMail("smtp.XX.com","[email protected]","DataCheck","lXX","XXXXXX!@#",new String[]{"[email protected]","[email protected]"},"DataCheckMail","测试一下"); sendMail.addAttachfile("D:\\123.xls"); sendMail.send(); } }
SmtpAuth代码
package com.dc.mail; public class SmtpAuth extends javax.mail.Authenticator { private String username,password; public SmtpAuth(String username,String password){ this.username = username; this.password = password; } protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new javax.mail.PasswordAuthentication(username,password); } }