一、背景

  我们在实际开发中,常常会遇到需要使用java代码进行发送邮件的需求,我们可以通过这种方式向用户推送通知等。

二、Java代码

  1 package com.hafiz.zhang.mail;
  2
  3 import java.util.Properties;
  4
  5 import javax.activation.DataHandler;
  6 import javax.activation.FileDataSource;
  7 import javax.mail.Address;
  8 import javax.mail.BodyPart;
  9 import javax.mail.Message;
 10 import javax.mail.Multipart;
 11 import javax.mail.Session;
 12 import javax.mail.Transport;
 13 import javax.mail.internet.InternetAddress;
 14 import javax.mail.internet.MimeBodyPart;
 15 import javax.mail.internet.MimeMessage;
 16 import javax.mail.internet.MimeMultipart;
 17
 18
 19 public class Mail {
 20
 21     private MimeMessage mimeMsg; //MIME邮件对象
 22     private Session session; //邮件会话对象
 23     private Properties props; //系统属性
 24     private boolean needAuth = false; //smtp是否需要认证
 25     //smtp认证用户名和密码
 26     private String username;
 27     private String password;
 28     private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
 29
 30     /**
 31      * Constructor
 32      * @param smtp 邮件发送服务器
 33      */
 34     public Mail(String smtp){
 35         setSmtpHost(smtp);
 36         createMimeMessage();
 37     }
 38
 39     /**
 40      * 设置邮件发送服务器
 41      * @param hostName String
 42      */
 43     public void setSmtpHost(String hostName) {
 44         System.out.println("设置系统属性:mail.smtp.host = "+hostName);
 45         if(props == null)
 46             props = System.getProperties(); //获得系统属性对象
 47         props.put("mail.smtp.host",hostName); //设置SMTP主机
 48     }
 49
 50
 51     /**
 52      * 创建MIME邮件对象
 53      * @return
 54      */
 55     public boolean createMimeMessage()
 56     {
 57         try {
 58             System.out.println("准备获取邮件会话对象!");
 59             session = Session.getDefaultInstance(props,null); //获得邮件会话对象
 60         }
 61         catch(Exception e){
 62             System.err.println("获取邮件会话对象时发生错误!"+e);
 63             return false;
 64         }
 65
 66         System.out.println("准备创建MIME邮件对象!");
 67         try {
 68             mimeMsg = new MimeMessage(session); //创建MIME邮件对象
 69             mp = new MimeMultipart();
 70
 71             return true;
 72         } catch(Exception e){
 73             System.err.println("创建MIME邮件对象失败!"+e);
 74             return false;
 75         }
 76     }
 77
 78     /**
 79      * 设置SMTP是否需要验证
 80      * @param need
 81      */
 82     public void setNeedAuth(boolean need) {
 83         System.out.println("设置smtp身份认证:mail.smtp.auth = "+need);
 84         if(props == null) props = System.getProperties();
 85         if(need){
 86             props.put("mail.smtp.auth","true");
 87         }else{
 88             props.put("mail.smtp.auth","false");
 89         }
 90     }
 91
 92     /**
 93      * 设置用户名和密码
 94      * @param name
 95      * @param pass
 96      */
 97     public void setNamePass(String name,String pass) {
 98         username = name;
 99         password = pass;
100     }
101
102     /**
103      * 设置邮件主题
104      * @param mailSubject
105      * @return
106      */
107     public boolean setSubject(String mailSubject) {
108         System.out.println("设置邮件主题!");
109         try{
110             mimeMsg.setSubject(mailSubject);
111             return true;
112         }
113         catch(Exception e) {
114             System.err.println("设置邮件主题发生错误!");
115             return false;
116         }
117     }
118
119     /**
120      * 设置邮件正文
121      * @param mailBody String
122      */
123     public boolean setBody(String mailBody) {
124         try{
125             BodyPart bp = new MimeBodyPart();
126             bp.setContent(""+mailBody,"text/html;charset=GBK");
127             mp.addBodyPart(bp);
128
129             return true;
130         } catch(Exception e){
131         System.err.println("设置邮件正文时发生错误!"+e);
132         return false;
133         }
134     }
135     /**
136      * 添加附件
137      * @param filename String
138      */
139     public boolean addFileAffix(String filename) {
140
141         System.out.println("增加邮件附件:"+filename);
142         try{
143             BodyPart bp = new MimeBodyPart();
144             FileDataSource fileds = new FileDataSource(filename);
145             bp.setDataHandler(new DataHandler(fileds));
146             bp.setFileName(fileds.getName());
147
148             mp.addBodyPart(bp);
149
150             return true;
151         } catch(Exception e){
152             System.err.println("增加邮件附件:"+filename+"发生错误!"+e);
153             return false;
154         }
155     }
156
157     /**
158      * 设置发信人
159      * @param from String
160      */
161     public boolean setFrom(String from) {
162         System.out.println("设置发信人!");
163         try{
164             mimeMsg.setFrom(new InternetAddress(from)); //设置发信人
165             return true;
166         } catch(Exception e) {
167             return false;
168         }
169     }
170     /**
171      * 设置收信人
172      * @param to String
173      */
174     public boolean setTo(String to){
175         if(to == null)return false;
176         try{
177             mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
178             return true;
179         } catch(Exception e) {
180             return false;
181         }
182     }
183
184     /**
185      * 设置抄送人
186      * @param copyto String
187      */
188     public boolean setCopyTo(String copyto)
189     {
190         if(copyto == null)return false;
191         try{
192         mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
193         return true;
194         }
195         catch(Exception e)
196         { return false; }
197     }
198
199     /**
200      * 发送邮件
201      */
202     public boolean sendOut()
203     {
204         try{
205             mimeMsg.setContent(mp);
206             mimeMsg.saveChanges();
207             System.out.println("正在发送邮件....");
208
209             Session mailSession = Session.getInstance(props,null);
210             Transport transport = mailSession.getTransport("smtp");
211             transport.connect((String)props.get("mail.smtp.host"),username,password);
212             transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
213             transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
214             //transport.send(mimeMsg);
215
216             System.out.println("发送邮件成功!");
217             transport.close();
218
219             return true;
220         } catch(Exception e) {
221             System.err.println("邮件发送失败!"+e);
222             return false;
223         }
224     }
225
226     /**
227      * 调用sendOut方法完成邮件发送
228      * @param smtp
229      * @param from
230      * @param to
231      * @param subject
232      * @param content
233      * @param username
234      * @param password
235      * @return boolean
236      */
237     public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password) {
238         Mail theMail = new Mail(smtp);
239         theMail.setNeedAuth(true); //需要验证
240
241         if(!theMail.setSubject(subject)) return false;
242         if(!theMail.setBody(content)) return false;
243         if(!theMail.setTo(to)) return false;
244         if(!theMail.setFrom(from)) return false;
245         theMail.setNamePass(username,password);
246
247         if(!theMail.sendOut()) return false;
248         return true;
249     }
250
251     /**
252      * 调用sendOut方法完成邮件发送,带抄送
253      * @param smtp
254      * @param from
255      * @param to
256      * @param copyto
257      * @param subject
258      * @param content
259      * @param username
260      * @param password
261      * @return boolean
262      */
263     public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password) {
264         Mail theMail = new Mail(smtp);
265         theMail.setNeedAuth(true); //需要验证
266
267         if(!theMail.setSubject(subject)) return false;
268         if(!theMail.setBody(content)) return false;
269         if(!theMail.setTo(to)) return false;
270         if(!theMail.setCopyTo(copyto)) return false;
271         if(!theMail.setFrom(from)) return false;
272         theMail.setNamePass(username,password);
273
274         if(!theMail.sendOut()) return false;
275         return true;
276     }
277
278     /**
279      * 调用sendOut方法完成邮件发送,带附件
280      * @param smtp
281      * @param from
282      * @param to
283      * @param subject
284      * @param content
285      * @param username
286      * @param password
287      * @param filename 附件路径
288      * @return
289      */
290     public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password,String filename) {
291         Mail theMail = new Mail(smtp);
292         theMail.setNeedAuth(true); //需要验证
293
294         if(!theMail.setSubject(subject)) return false;
295         if(!theMail.setBody(content)) return false;
296         if(!theMail.addFileAffix(filename)) return false;
297         if(!theMail.setTo(to)) return false;
298         if(!theMail.setFrom(from)) return false;
299         theMail.setNamePass(username,password);
300
301         if(!theMail.sendOut()) return false;
302         return true;
303     }
304
305     /**
306      * 调用sendOut方法完成邮件发送,带附件和抄送
307      * @param smtp
308      * @param from
309      * @param to
310      * @param copyto
311      * @param subject
312      * @param content
313      * @param username
314      * @param password
315      * @param filename
316      * @return
317      */
318     public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password,String filename) {
319         Mail theMail = new Mail(smtp);
320         theMail.setNeedAuth(true); //需要验证
321
322         if(!theMail.setSubject(subject)) return false;
323         if(!theMail.setBody(content)) return false;
324         if(!theMail.addFileAffix(filename)) return false;
325         if(!theMail.setTo(to)) return false;
326         if(!theMail.setCopyTo(copyto)) return false;
327         if(!theMail.setFrom(from)) return false;
328         theMail.setNamePass(username,password);
329
330         if(!theMail.sendOut()) return false;
331         return true;
332     }
333
334 } 

测试代码如下:

 1 public static void main(String[] args){
 2     String smtp = "SMTP服务器";
 3     String from = "发信人";
 4     String to = "收信人";
 5     String copyto = "抄送人";
 6     String subject = "邮件主题";
 7     String content = "邮件内容";
 8     String username="用户名";
 9     String password="密码";
10      String filename = "附件路径,如:F:\\笔记<a>\\struts2</a>与mvc.txt";
11     Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password, filename);
12 }

使用JavaMail发送邮件相关推荐

  1. javamail发送邮件的简单实例[转]

    http://www.blogjava.net/wangfun/archive/2009/04/15/265748.html 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦 ...

  2. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  3. JavaMail发送邮件的笔记及Demo

    最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误: 网络上搜索解决方式,多次尝 ...

  4. javamail发送邮件的简单实例

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  5. javamail发送邮件(转)

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  6. javamail发送邮件,解决被垃圾邮件问题

    javamail发送邮件,解决被垃圾邮件问题 参考文章: (1)javamail发送邮件,解决被垃圾邮件问题 (2)https://www.cnblogs.com/mzqworld/articles/ ...

  7. JavaMail 发送邮件的实例

    JavaMail是提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便 ...

  8. 通过javaMail发送邮件,可选添加多个收件人,密送,抄送,多个附件,超实用

    自己通过学习多人的代码,并整理了一个简单,调用方便的通过javaMail发送邮件.只需填写发件邮箱地址,密码:收件人地址,附件,选择是否保存,设置自己发送邮件时的昵称就ok了.代码自动匹配设置smtp ...

  9. JavaMail发送邮件Demo

    JavaMail发送邮件Demo Maven依赖 <dependency><groupId>org.springframework.boot</groupId>&l ...

  10. 通过javaMail发送邮件,可选添加多个收件人,密送,抄送,多个附件

    通过javaMail发送邮件,可选添加多个收件人,密送,抄送,多个附件 https://blog.csdn.net/qq_35434831/article/details/79666035 版权声明: ...

最新文章

  1. Big Data Security Part One: Introducing PacketPig
  2. 如何评价算法的好坏?
  3. grpc使用记录(一) gRPC编译(mscv/gcc)
  4. LeetCode Binary Tree Preorder Traversal(二叉树的前序遍历)
  5. 图像处理、语音处理的应用及前沿技术_人工智能,虚拟技术,语音识别技术在我们的生活中...
  6. php+ok,php fscokopen实现数据异步调用代码
  7. SpringBoot App Registers UNKNOWN with Eureka in Brixton SR3
  8. 按钮控制android progressbar,Android ProgressBar手动控制开始和停止
  9. 深入理解Python对象(源码深度解析)
  10. 联想计算机睡眠如何唤醒,笔记本电脑休眠和睡眠如何唤醒
  11. 图形学常见概念与算法-常用初等数学公式
  12. 央行最新公布2019支付牌照持牌机构公司列表,共255家(附清单)
  13. web asp.net 发布网站和配置iis(win10)
  14. css 写一个左中右布局占满屏幕,左右两块固定宽度200,中间自适应宽,先加载中间块
  15. Bouncing Ball
  16. python——esc按键按下与识别
  17. 兼容IE9的文件上传
  18. file html5 样式,CSS小技巧之自定义个性的file表单样式
  19. 图像处理用什么神经网络,神经网络图像处理
  20. 侍魂胧月传说服务器维护中,侍魂胧月传说手游4月8日停机维护更新公告

热门文章

  1. 为什么 Linux 需要 Swapping
  2. rabbitmq sleuth zinkip 分布式链路追踪
  3. 帅气逼人的Redis可视化工具
  4. 求求你们了,别再写满屏的 try catch 了!!
  5. 跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现
  6. SpringBoot2.0.3之quartz集成,不是你想的那样哦!
  7. Spring Boot第二篇:Spring Boot配置文件详解
  8. 坚持刷题678天的感受!
  9. 2021入坑图像分割,我该从哪儿入手?
  10. 想读博士?进来看看!