JavaMail发送邮件
使用javax.mail可以发送普通文本文件,HTML格式的文件,同样可以发送图文并茂(包含附件)的java邮件。
发送邮件需要在验证发送的邮箱和密码:验证的帐号(本人使用163邮件)需要打开POP3/SMTP/IMAP
设置邮箱授权登录密码(已设置好):
新建java项目添加javax.mail.jar文件,并添加如下类文件:
发送邮件格式需要基本信息类:EmailMessage
package com.util.mail; import java.util.Date; /** * 发送邮件需要基本信息类 */ public class EmailMessage { // 邮件接收者 public static String TO = "15026933568@163.com"; // 邮件发送人 public static String FROM = "15026933568@163.com"; // 发送人姓名 public static String FROM_NAME = "15026933568"; // 抄送者 public static String CC="1298243794@qq.com"; // 暗送者 public static String BCC="15026933568@163.com"; // 邮件类型 public static String Email_Content = "text/plain"; // 邮件主题 public static String Email_Subject = "Test Email With JavaMail"; // 邮件头 public static String Email_Header = "This Is Email Header"; // 邮件内容 public static String Email_Body = "<a href=\"http://www.baidu.com\">This Is Email Body</a>"; // 使用邮箱 如果使用QQ修改为smtp.qq.com public static String Email_Host = "smtp.163.com"; // 邮件发送日期 public static Date sendDate = new Date(); // 是否验证 public static boolean validate = true; }
发送者邮件信息验证类:MailAuthenticator
package com.util.mail; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * 用户名和密码的验证 * @author xiazhongwei * */ public class MailAuthenticator extends Authenticator{ private String username="15026933568"; private String password="******"; public MailAuthenticator() { super(); } /** * 设置验证的用户名和密码 */ public MailAuthenticator(String userName , String password) { super(); this.username = userName; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(this.username,this.password); } }
发送邮件类:
package com.util.mail; 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.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 SendEmail { /** * 发送普通邮件 * @throws Exception */ public void doSendNormalMail() { // 获取系统环境 Properties prop = new Properties(); Authenticator auth = null; // 判断发送邮件是否需要验证 if (EmailMessage.validate) { // 邮件服务器认证 用户名和密码 auth = new MailAuthenticator(); } // 添加必要的信息 prop.put("mail.smtp.host", EmailMessage.Email_Host); prop.put("mail.smtp.auth", "true"); // 设置对话和邮件服务器进行通讯 Session session = Session.getDefaultInstance(prop, auth); // 在控制台显示Debug信息 session.setDebug(true); // 设置邮件对象 Message message = new MimeMessage(session); try { // 设置邮件主题 message.setSubject(EmailMessage.Email_Subject); // 设置邮件标题 message.setHeader("Header", EmailMessage.Email_Header); // 设置发送时间 message.setSentDate(EmailMessage.sendDate); // 设置发信人地址 和 名字 Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME); // 把发件人信息添加到信息中 message.setFrom(address); // 设置发件人地址 Address toAddress = new InternetAddress(EmailMessage.TO); // 设置接收人地址 message.setRecipient(Message.RecipientType.TO, toAddress); // 设置多个收件人地址 // message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com")); // 设置邮件格式 message.setContent("Content", EmailMessage.Email_Content); // 设置邮件内容 必须在设置文件格式后面 message.setText(EmailMessage.Email_Body); // 保存上面添加的信息 message.saveChanges(); // 发送邮件 System.out.println("sendNormalEmail() 开始发送邮件……"); Transport.send(message); System.out.println("发送成功!"); } catch (Exception e) { System.out.println("出错"); e.printStackTrace(); } } /** * 发送HTML格式的邮件 */ public void doSendHtmlMail() { // 获取系统环境 Properties prop = new Properties(); Authenticator auth = null; if (EmailMessage.validate) { // 邮件服务器认证 用户名和密码 auth = new MailAuthenticator(); } // 添加必要的信息 prop.put("mail.smtp.host", EmailMessage.Email_Host); prop.put("mail.smtp.auth", "true"); // 设置对话和邮件服务器进行通讯 Session session = Session.getDefaultInstance(prop, auth); // 设置邮件对象 Message message = new MimeMessage(session); try { // 设置邮件主题 message.setSubject(EmailMessage.Email_Subject); // 设置邮件标题 message.setHeader("Header", EmailMessage.Email_Header); // 设置发送时间 message.setSentDate(EmailMessage.sendDate); // 设置发信人地址 和 名字 Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME); // 把发件人信息添加到信息中 message.setFrom(address); // 设置发件人地址 Address toAddress = new InternetAddress(EmailMessage.TO); // 设置接收人地址 message.setRecipient(Message.RecipientType.TO, toAddress); // 设置多个收件人地址 // message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com")); // 设置发送信息的内容 下面为发送hmml // 设置邮件格式 EmailMessage.Email_Content = "text/html; charset=utf-8"; message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content); // 保存上面添加的信息 message.saveChanges(); // 发送邮件 System.out.println("doSendHtmlMail() 开始发送邮件……"); Transport.send(message); System.out.println("发送成功!"); } catch (Exception e) { System.out.println("出错"); e.printStackTrace(); } } /** * 发送带有附件格式的邮件 */ public void doSendAttachmentMail() { // 获取系统环境 Properties prop = new Properties(); Authenticator auth = null; if (EmailMessage.validate) { // 邮件服务器认证 用户名和密码 auth = new MailAuthenticator(); } // 添加必要的信息 prop.put("mail.smtp.host", EmailMessage.Email_Host); prop.put("mail.smtp.auth", "true"); // 设置对话和邮件服务器进行通讯 Session session = Session.getDefaultInstance(prop, auth); // 设置邮件对象 Message message = new MimeMessage(session); try { // 设置邮件主题 message.setSubject(EmailMessage.Email_Subject); // 设置邮件标题 message.setHeader("Header", EmailMessage.Email_Header); // 设置发送时间 message.setSentDate(EmailMessage.sendDate); // 设置发信人地址 和 名字 Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME); // 把发件人信息添加到信息中 message.setFrom(address); // 设置发件人地址 Address toAddress = new InternetAddress(EmailMessage.TO); // 设置接收人地址 message.setRecipient(Message.RecipientType.TO, toAddress); // 设置多个收件人地址 // message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com")); // 设置发送信息的内容 下面为发送附件 message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content); //BodyPart messageBodyPart = new MimeBodyPart(); MimeBodyPart messageBodyPart = new MimeBodyPart(); String body = "<h4>内含附件、图文并茂的邮件测试!!!</h4> </br>" + "<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br>" + "<img src = \"cid:logo_jpg\"></a>"; MimeBodyPart image = createContent(body,"E:\\1.jpg"); messageBodyPart.setText("<img src='cid:image_fairy_tail'/>"); Multipart multipart = new MimeMultipart(); //multipart.addBodyPart(messageBodyPart); messageBodyPart = new MimeBodyPart(); // 设置上传的资源 DataSource source = new FileDataSource("E:\\3.txt"); // 添加到 messageBodyPart.setDataHandler(new DataHandler(source)); // 设置文件名称,记得后缀名 messageBodyPart.setFileName("3.txt"); multipart.addBodyPart(messageBodyPart); // 5. 创建图片“节点” /*MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("E:\\1.jpg")); // 读取本地文件 image.setDataHandler(dh); // 将图片数据添加到“节点” image.setContentID("image_fairy_tail"); */ // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID) // 6. 创建文本“节点” MimeBodyPart text = new MimeBodyPart(); // 这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片 text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8"); multipart.addBodyPart(image); multipart.addBodyPart(text); message.setContent(multipart); // 保存上面添加的信息 message.saveChanges(); // 发送邮件 System.out.println("doSendAttachmentMail() 开始发送邮件……"); Transport.send(message); System.out.println("发送成功!"); } catch (Exception e) { System.out.println("出错"); e.printStackTrace(); } } /** * 根据传入的邮件正文body和文件路径创建图文并茂的正文部分 */ public MimeBodyPart createContent(String body, String fileName) throws Exception { // 用于保存最终正文部分 MimeBodyPart contentBody = new MimeBodyPart(); // 用于组合文本和图片,"related"型的MimeMultipart对象 MimeMultipart contentMulti = new MimeMultipart("related"); // 正文的文本部分 MimeBodyPart textBody = new MimeBodyPart(); textBody.setContent(body, "text/html;charset=utf-8"); contentMulti.addBodyPart(textBody); // 正文的图片部分 MimeBodyPart jpgBody = new MimeBodyPart(); FileDataSource fds = new FileDataSource(fileName); jpgBody.setDataHandler(new DataHandler(fds)); jpgBody.setContentID("logo_jpg"); contentMulti.addBodyPart(jpgBody); // 将上面"related"型的 MimeMultipart 对象作为邮件的正文 contentBody.setContent(contentMulti); return contentBody; } }
发送邮件入口测试函数类:
/** * @param args */ public static void main(String[] args) { //new SendEmail().doSendNormalMail(); //new SendEmail().doSendHtmlMail(); new SendEmail().doSendAttachmentMail(); }
创建好上述内容执行发送邮件测试函数:(发送正文包含文字图片,附件)