javamail 邮件发送、带格式、已保存
2018-01-29 16:52
288 查看
最近工作中用需要发送邮件,一脸懵的我开始各种百度。闲言少叙,开始我的第一个邮件发送吧。
本实例目标:发送一封/多封邮件,并将邮件保存到已发送内。
1.简单邮件发送:
1.1准备jar包:javamail
百度网盘:https://pan.baidu.com/s/1kVTdVWN
官网下载地址:https://github.com/javaee/javamail/releases
1.2 编写代码
参考文档:
简单邮件发送
JavaMail 发送 html 格式、带附件的邮件
发送模板邮件以及保存到发件箱
保存到发件箱
使用IMAP协议接收并解析电子邮件
返回错误信息
本实例目标:发送一封/多封邮件,并将邮件保存到已发送内。
1.简单邮件发送:
1.1准备jar包:javamail
百度网盘:https://pan.baidu.com/s/1kVTdVWN
官网下载地址:https://github.com/javaee/javamail/releases
1.2 编写代码
import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.mail.AuthenticationFailedException; import javax.mail.Flags.Flag; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import com.sun.mail.smtp.SMTPAddressFailedException; import oa.common.Result; public class SendMail { private static String get = "imap";//类型 private static String imapmailServer = "mail.xxx.com.cn";//服务器类型 private static String username = null;//发件人邮箱 private static String password = null;//发件人密码 private static String requestMail = null;//收件人邮箱 private static Transport transport = null;// 邮件链接 private static Session session = null;// 邮件会话 private static String title = null;// 标题 private static String content = null;// 内容 public static void main(String[] args) throws MessagingException, UnsupportedEncodingException { SendMail mail = new SendMail(); } /** * 发送邮件 * @param username * @param password * @param title * @param content * @param requestMail * @return */ public Result sendMail(String username, String password, String requestMail, String title, String content) { Result result = null; if (Tools.isNull(username) || Tools.isNull(password) || Tools.isNull(title) || Tools.isNull(content) || Tools.isNull(requestMail)) { result = new Result(false, "username/password/title/content/requestMail 不能为空!"); return result; } setUsername(username); setPassword(password); setRequestMail(requestMail); setTitle(title); setContent(content); // 3. 创建一封邮件 MimeMessage message; try { // 获得会话 getTransport(); message = createMimeMessage(username, requestMail); // 6. 发送邮件, 发到所有的收件地址, // message.getAllRecipients()获取到的是在创建邮件对象时添加的所有收件人,抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功..."); result = new Result(true, requestMail + "发送成功!"); result = saveEmailToSentMailFolder(message); System.out.println("发送保存成功..."); result.setMessage(result.getMessage() + ";" + "保存成功!"); } catch (AuthenticationFailedException e) { System.err.println(e.getMessage()); result = new Result(false, "发件人有户名密码错误:" + username + " pwd:" + password); } catch (SMTPAddressFailedException e) { System.err.println(e.getMessage()); result = new Result(false, "收件人邮箱错误请检查:" + e.getMessage()); } catch (UnsupportedEncodingException e) { result = new Result(false, requestMail + "邮件发送失败!" + e.getMessage()); e.printStackTrace(); } catch (MessagingException e) { result = new Result(false, requestMail + "邮件发送失败!" + e.getMessage()); e.printStackTrace(); } return result; } /** * 邮件内容 * @param sendMail 发件人邮箱 * @param receiveMail 收件人邮箱 * @return * @throws UnsupportedEncodingException * @throws MessagingException */ private static MimeMessage createMimeMessage(String sendMail, String receiveMail) throws Unsupport 4000 edEncodingException, MessagingException { // 1. 创建一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称) message.setFrom(new InternetAddress(sendMail, "我是发件人昵称", "UTF-8")); // 3. To: 收件人(可以增加多个收件人、抄送、密送) message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "我是收件人昵称", "UTF-8")); // 3.1 To: 多个收件人(可以增加多个收件人、抄送、密送) // InternetAddress[] addresses = new InternetAddress[2]; // addresses[0] = new InternetAddress("xxx02@163.com", "00用户", "UTF-8"); // addresses[1] = new InternetAddress("xxx01@163.com", "01用户", // "UTF-8"); // message.setRecipients(MimeMessage.RecipientType.TO, addresses); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题) message.setSubject(title, "UTF-8"); // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容) message.setContent(content, "text/html;charset=UTF-8"); // 6. 设置发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges(); return message; } /** * 获取发邮件邮箱 * @return * @throws MessagingException */ private static Folder getSentMailFolder() throws MessagingException { Properties props = new Properties(); // 参数配置 // 准备连接服务器的会话信息 props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imap.host", imapmailServer); props.setProperty("mail.imap.port", "143"); // 创建Session实例对象 Session session = Session.getInstance(props); // 创建IMAP协议的Store对象 Store store = session.getStore("imap"); // 连接邮件服务器 store.connect(username, password); // 获得收件箱--如果不是“已发送”可以先输出看一下;此方法也可用于查看邮件。 // Folder folder = store.getFolder("INBOX"); // Folder defaultFolder = store.getDefaultFolder(); // Folder[] allFolder = defaultFolder.list(); // for (Folder folder : allFolder) { // System.out.println(folder); // } // 以读写模式打开发件箱 Folder folder = store.getFolder("已发送"); folder.open(Folder.READ_WRITE); // 获得收件箱的邮件列表 // Message[] messages = folder.getMessages(); // // // 打印不同状态的邮件数量 // System.out.println("收件箱中共" + messages.length + "封邮件!"); // System.out.println("收件箱中共" + folder.getUnreadMessageCount() + // "封未读邮件!"); // System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!"); // System.out.println("收件箱中共" + folder.getDeletedMessageCount() + // "封已删除邮件!"); return folder; } /** * 保存邮件到发件箱 * * @param message * 邮件信息 */ private static Result saveEmailToSentMailFolder(Message message) { Result result = new Result(true,"保存到发件箱成功!"); Store store = null; Folder sentFolder = null; try { sentFolder = getSentMailFolder(); message.setFlag(Flag.SEEN, true); // 设置已读标志 sentFolder.appendMessages(new Message[] { message }); System.out.println("已保存到发件箱..."); } catch (Exception e) { result = new Result(false, "保存到已发送邮箱错误:" + e.getMessage()); e.printStackTrace(); } finally { // 判断发件文件夹是否打开如果打开则将其关闭 if (sentFolder != null && sentFolder.isOpen()) { try { sentFolder.close(true); } catch (MessagingException e) { e.printStackTrace(); } } // 判断邮箱存储是否打开如果打开则将其关闭 if (store != null && store.isConnected()) { try { store.close(); } catch (MessagingException e) { e.printStackTrace(); } } } return result; } public static String getUsername() { return username; } public static void setUsername(String username) { SendMail.username = username; } public static String getPassword() { return password; } public static void setPassword(String password) { SendMail.password = password; } public static String getRequestMail() { return requestMail; } public static void setRequestMail(String requestMail) { SendMail.requestMail = requestMail; } public static Transport getTransport() throws MessagingException { // 1. 创建参数配置, 用于连接邮件服务器的参数配置 Properties props = new Properties(); // 参数配置 props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", imapmailServer); // 发件人的邮箱的SMTP服务器地址 props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 // 2. 根据配置创建会话对象, 用于和邮件服务器交互 session = Session.getInstance(props); session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log // 4. 根据 Session 获取邮件传输对象 setTransport(session.getTransport()); // 535 Error: authentication failed transport.connect(username, password); return transport; } public static Session getSession() { return session; } public static void setSession(Session session) { SendMail.session = session; } public static String getTitle() { return title; } public static void setTitle(String title) { SendMail.title = title; } public static String getContent() { return content; } public static void setContent(String content) { SendMail.content = content; } public static void setTransport(Transport transport) { SendMail.transport = transport; } }
参考文档:
简单邮件发送
JavaMail 发送 html 格式、带附件的邮件
发送模板邮件以及保存到发件箱
保存到发件箱
使用IMAP协议接收并解析电子邮件
返回错误信息
相关文章推荐
- JavaMail使用5 -- 发送邮件2 -- 发送HTML格式邮件
- JavaMail实现发送超文本(html)格式邮件的方法
- Javamail发送邮件后并保存邮件到已发送
- [Java] JavaMail 发送 html 格式、带附件的邮件
- 用javamail发送htm格式的邮件
- 使用JavaMail实现发送模板邮件以及保存到发件箱
- JavaMail学习笔记-2(HTML格式的邮件发送)
- JavaMail学习笔记-2(HTML格式的邮件发送)
- JSP与JavaMail(4)---发送HTML格式的邮件
- javaMail实现以html格式发送邮件
- JAVAMAIL发送邮件正文是html格式并且显示图片还带有附件的邮件
- [Java] JavaMail 发送带图片的 html 格式的邮件
- JavaMail邮件发送-将邮件保存到本地和发送一封本地邮件
- JavaMail应用——如何发送超文本(html)格式的邮件
- JSP与JavaMail(4)---发送HTML格式的邮件
- 用JavaMail发送HTML格式的邮件
- javamail实现向多人发送带附件的html格式邮件
- 使用javamail发送html格式邮件
- 使用JavaMail实现发送模板邮件以及保存到发件箱
- javaMail-5-发送HTML格式邮件