java mail发送邮件群发 带附件的发送(源代码+详细目录结构)java Email 发送实例
来源:互联网 发布:mac excel 行序号 编辑:程序博客网 时间:2024/05/19 18:38
项目用到Java程序发送Email邮件从网上查了一些资料自己整理一个Demo 供大家参考
此邮件实现功能: 单发、群发邮件,可以带多个附件。欢迎拍砖
1、需要用到的jar包和项目的目录结构
需要自己准备以下两个jar,google自己搜地址
activation.jar
mail.jar
Code代码实现
-----------------------------------------------------------发送邮件需要的基本信息-----------------------------------------------------
/** * java邮件测试 * @author Administrator * */import java.util.HashMap;import java.util.Map;import java.util.Properties;import java.util.Vector;import javax.mail.internet.MimeUtility;/** * 发送邮件需要的基本信息 * */public class MailTest { private String mailServerHost; //发送邮件的服务器 private String mailServerPort="25"; //发送邮件的服务器的端口 private String fromAddress; //发送者地址 private String toAddress; //接收者地址 private String username; //发送者用户名 private String password; //发送者密码 private boolean validate=true; //是否需要身份验证 private String subject; //邮件主题 private String content; //邮件内容 private Map<String, String> mailType; //邮箱类型 private String filename = "";// 附件文件名 private Vector file = new Vector();// 附件文件集合 /** * 得到邮件会话属性 * */ public Properties getProperties(){ Properties p = new Properties(); p.put("mail.smtp.host", this.mailServerHost); p.put("mail.smtp.port", this.mailServerPort); p.put("mail.smtp.auth", validate?"true":"false"); return p; } public String getMailServerHost() { return mailServerHost; } public void setMailServerHost(String mailServerHost) { this.mailServerHost = mailServerHost; } public String getMailServerPort() { return mailServerPort; } public void setMailServerPort(String mailServerPort) { this.mailServerPort = mailServerPort; } public String getFromAddress() { return fromAddress; } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } public String getToAddress() { return toAddress; } public void setToAddress(String toAddress) { this.toAddress = toAddress; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; this.fromAddress=username; if(username!=null&&username.length()>0){ String fromEmailExt=username.substring(username.lastIndexOf("@")+1,username.lastIndexOf(".")); this.mailServerHost=getMailType().get(fromEmailExt); } } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isValidate() { return validate; } public void setValidate(boolean validate) { this.validate = validate; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Map<String, String> getMailType() { mailType=new HashMap<String, String>(); mailType.put("163","smtp.163.com"); mailType.put("139","smtp.139.com"); mailType.put("126","smtp.126.com"); mailType.put("qq", "smtp.qq.com"); mailType.put("sohu", "smtp.sohu.com"); mailType.put("live","smtp.live.cn"); mailType.put("msn","smtp.msn.com"); mailType.put("kum", "mail.kum.net.cn"); mailType.put("hotmail","smtp.hotmail.cn"); return mailType; } public void setMailType(Map<String, String> mailType) { this.mailType = mailType; } public void attachfile(String fname) { file.addElement(fname); } public Vector getFile() {return file;}public void setFile(Vector file) {this.file = file;}/** * * 方法说明:把主题转换为中文 * 输入参数:String strText * 返回类型: */ public String transferChinese(String strText) { try { strText = MimeUtility.encodeText(new String(strText.getBytes(), "GB2312"), "GB2312", "B"); } catch (Exception e) { e.printStackTrace(); } return strText; }public String getFilename() {return filename;}public void setFilename(String filename) {this.filename = filename;} }
------------------------------发邮件时的身份验证器-------------------------------
import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * 发邮件时的身份验证器 */public class CardId extends Authenticator{ String userName = null; String password = null; public CardId(String userName, String password) { this.userName = userName; this.password = password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } }
-----------------------邮件发送器类,也是主体部分---------------------------
import java.util.Date;import java.util.Enumeration;import java.util.Properties;import java.util.Vector;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 MailContent{ /** * 根据邮件会话属性和密码验证器构造一个发送邮件的session * @return */ protected static Session getSession(MailTest MailTest){ if(MailTest == null){ return null; } CardId authenticator = null; Properties pro = MailTest.getProperties(); if(MailTest.isValidate()){ authenticator = new CardId(MailTest.getUsername(),MailTest.getPassword()); } return Session.getDefaultInstance(pro, authenticator); } /** * 发送文本格式邮件 * @return */ public static boolean sendTextMail(MailTest MailTest){ try { //得到session Session mailSession = getSession(MailTest); //根据session创建一个邮件消息 Message mailMessage=new MimeMessage(mailSession); //创建邮件发送者的地址 Address fromAddress=new InternetAddress(MailTest.getFromAddress()); //设置邮件发送者的地址 mailMessage.setFrom(fromAddress); //1、创建邮件接收者的地址(只能给一个用户发送邮件) // Address toAddress=new InternetAddress(MailTest.getToAddress()); //设置邮件接收者地址 //mailMessage.setRecipient(Message.RecipientType.TO, toAddress); //2、创建邮件接收者的地址(可以给多个用户同时发送邮件 不同接受者之间用,隔开) mailMessage.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(MailTest.getToAddress())) ; //设置邮件的主题(转成中文) mailMessage.setSubject(MailTest.getSubject());// mailMessage.setSubject(MailTest.transferChinese(MailTest.getSubject())); //设置邮件的发送内容 mailMessage.setText(MailTest.getContent()); //设置发送邮件的时间 mailMessage.setSentDate(new Date()); //发送邮件 Transport.send(mailMessage); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 发送html格式邮件 * @return */ public static boolean sendHtmlMail(MailTest MailTest) { try { //得到session Session mailSession = getSession(MailTest); //根据session创建一个邮件消息 Message mailMessage = new MimeMessage(mailSession); //创建邮件发送者的地址 Address fromAddress=new InternetAddress(MailTest.getFromAddress()); //设置邮件发送者的地址 mailMessage.setFrom(fromAddress);// //1、创建邮件接收者的地址// Address toAddress=new InternetAddress(MailTest.getToAddress());// //设置邮件接收者地址(可以给一个用户发送邮件)// mailMessage.setRecipient(Message.RecipientType.TO, toAddress); //2、创建邮件接收者的地址(可以给多个用户同时发送邮件 不同接受者之间用,隔开) mailMessage.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(MailTest.getToAddress())) ; //设置邮件的主题(转成中文) mailMessage.setSubject(MailTest.getSubject());// mailMessage.setSubject(MailTest.transferChinese(MailTest.getSubject())); //设置邮件消息发送的时间 mailMessage.setSentDate(new Date()); //MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 Multipart mainPart = new MimeMultipart(); //创建一个包含HTML内容的MimeBodyPart BodyPart html = new MimeBodyPart(); //设置HTML内容 html.setContent(MailTest.getContent(), "text/html; charset=UTF-8"); //将内容添加到容器对象中 mainPart.addBodyPart(html); // 向Multipart添加附件 Vector file=MailTest.getFile(); String filename=MailTest.getFilename(); Enumeration efile = file.elements(); while (efile.hasMoreElements()) { MimeBodyPart mbpFile = new MimeBodyPart(); filename = efile.nextElement().toString(); FileDataSource fds = new FileDataSource(filename); mbpFile.setDataHandler(new DataHandler(fds)); //这个方法可以解决附件乱码问题 String filename1= new String(fds.getName().getBytes(),"ISO-8859-1"); mbpFile.setFileName(filename1); // 向MimeMessage添加(Multipart代表附件) mainPart.addBodyPart(mbpFile); } file.removeAllElements(); //将MiniMultipart对象设置为邮件内容 mailMessage.setContent(mainPart); //发送邮件 Transport.send(mailMessage); return true; } catch (Exception e) { e.printStackTrace(); return false; } } }
---------------------------------------测试-----------------------------------------
/** * 测试类 * */public class SendMessage{public void test() {MailTest senderInfo=new MailTest(); senderInfo.setUsername("809044093@qq.com"); //用户名 senderInfo.setPassword("809044093"); //密码(这里写你自己邮箱的密码 ^_^) senderInfo.setToAddress("245173677@qq.com,809044093@qq.com");//接收者(如果是多个邮箱 每个邮箱之间用,分割) senderInfo.setSubject("这是群发邮件主题"); //主题 senderInfo.setContent("<a href='http://blog.csdn.net/prefectjava'>点击此处查看更多内容</a>"); //内容 senderInfo.attachfile("d:\\1.txt"); senderInfo.attachfile("d:\\index.html");//如果还有附件继续累加即可,格式不限制 //发送(HTML格式的) MailContent.sendHtmlMail(senderInfo); //发送纯文本格式// MailContent.sendTextMail(senderInfo); } public static void main(String[] args) { new SendMessage().test(); }}
以上为具体代码实现。
PS:程序时发现了以下两个些错误,贴出来跟大家分享分享
希望对大家有帮助。错误一:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
解决方法:到D:\MyEclipse 6.5
\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806
\data\libraryset\EE_5目录下找到javaee.jar删除其中到mail文件夹。
错误二:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream
解决方法:
下载mail.jar和activation.jar文件加入到工程中。
错误三:
如果出现 以下异常
javax.mail.AuthenticationFailedException
检查是否邮箱的用户名 、密码错误。
@Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); }
★这个身份验证的是重写的父类的方法,方法名不要自己定义 否则出错
3 0
- java mail发送邮件群发 带附件的发送(源代码+详细目录结构)java Email 发送实例
- java mail发送邮件可群发并带附件
- 带附件的java.mail邮件发送
- Java Mail 发送带附件邮件
- java邮件发送 实现群发和带附件发送
- Java Mail发送Email总结(二)--创建带图片或附件的邮件
- 使用java mail发送带附件的邮件
- Java Mail实现带附件的邮件发送
- Java Mail实现发送带附件的邮件
- java Mail发送附件邮件
- java发送Email,带附件
- Java发送email 带附件
- Java Mail 发送附件的邮件
- JAVA 发送带附件的E-mail
- java mail发送邮件(源代码)
- java mail发送邮件(源代码)
- java发送带附件邮件
- Java邮件发送带附件
- POJ 2590 Steps (ZOJ 1871)
- 百度地图开发简单案例(源代码)
- Sobel和Roberts算子的推导过程
- String.format()方法使用说明
- ubuntu下llvm-gcc the Potential incompatible plugin version解决办法
- java mail发送邮件群发 带附件的发送(源代码+详细目录结构)java Email 发送实例
- SpringMVC表单标签简介
- libxml2 简单操作
- 十年莽撞 IT 路
- VI/VIM常用命令
- Dom4j
- Android中万能的BaseAdapter的使用
- 02 Java面向对象
- 装饰者模式