使用Spring发送邮件

1. [代码]properties 文件     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#配置服务器邮件账号信息
#服务器
mail.smtp.host=smtp.xxx.com
#是否需要验证密码
mail.smtp.auth=true
#超时时间
mail.smtp.timeout=25000
#发件人信箱
mail.smtp.from=xxx@163.com
#用户名
mail.smtp.username=xxx@163.com
#密码
mail.smtp.password=123456

2. [代码]配置 applicationContext.xml     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     <!-- in-memory database and a datasource -->
     < bean id = "propertyConfigurer"
           class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
           p:location = "classpath:jdbc.properties" />
<!-- 配置邮件 senderbean -->
< bean id = "mailSender" class = "org.springframework.mail.javamail.JavaMailSenderImpl" >
     < property name = "host" value = "${mail.smtp.host}" ></ property >
     < property name = "javaMailProperties" >
         < props >
             < prop key = "mail.smtp.auth" >${mail.smtp.auth}</ prop >
             < prop key = "mail.smtp.timeout" >${mail.smtp.timeout}</ prop >      
         </ props >
     </ property >
     < property name = "username" value = "${mail.smtp.username}" ></ property >
     < property name = "password" value = "${mail.smtp.password}" ></ property >
</ bean >

3. [代码]编写 ACTION 代码,实现邮件发送功能,这里还附加了一个附件     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/**
  ********************************************************************************************
  * @ClassName: ForcastAction
  * @Description: TODO
  * @author ZhouQian
  * @date 2014-6-11-上午11:00:34
  ********************************************************************************************
  */
public class ForcastAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, SessionAware {
     private static final long serialVersionUID = 1L;
     private HttpServletRequest request;
     private HttpServletResponse response;
     // struts mapsession ,key value
     private Map<String, Object> session;
 
     // 邮件发送器
     private JavaMailSenderImpl mailSender;
     // 设定上传文件路径
     private static final String FOLDER_NAME = "/upload/" ;
 
     // 上传的附件和附件名称
     private File[] attachment;
     private String[] attachmentFileName;
 
     /**
      * 邮件发送 接口用于向测试用户发送邮件 后期可能采用定时器进行邮件发送
      */
     public void sendEmail() {
         // 邮件POJO 对象
         MailPojo mailPojo = new MailPojo();
         MimeMessage m = mailSender.createMimeMessage();
         
         // 构造附件
         String path = "jsp/theme/analyser/hero.html" ;
         path = request.getSession().getServletContext().getRealPath( "/" ) + path;
         attachment = new File[ 1 ];
         attachment[ 0 ] = new File(path);
         attachmentFileName = new String[ 1 ];
         attachmentFileName[ 0 ] = "hero.html" ;
         try {
             MimeMessageHelper helper = new MimeMessageHelper(m, true , "UTF-8" );
             // 设置收件人
             helper.setTo( "xxx@163.com" );
             // 设置抄送
//          helper.setCc("");
             // 设置发件人
             helper.setFrom( "xxx@163.com" );
             // 设置暗送
//          helper.setBcc("");
             // 设置主题
             helper.setSubject( "测试邮件!" );
             // 设置 HTML 内容
             helper.setText( "这只是一封测试邮件!如果你收到的话说明我已经发送成功了!" );
 
             // 保存附件,这里做一个 copy 只是为了防止上传文件丢失
             attachment = saveFiles(attachment, attachmentFileName);
             for ( int i = 0 ; attachment != null && i < attachment.length; i++) {
                 File file = attachment[i];
                 // 附件源
                 FileSystemResource resource = new FileSystemResource(file);
                 helper.addAttachment(attachmentFileName[i], resource);
                 
                 // mail 对象填充
                 AttachmentPojo attachmentPojo = new AttachmentPojo();
                 attachmentPojo.setFilename(attachmentFileName[i]);
                 attachmentPojo.setFilepath(file.getAbsolutePath());
                 mailPojo.getAttachmentPojos().add(attachmentPojo);
             }
 
             // 进行邮件发送和邮件持久类的状态设定z
             mailSender.send(m);
             mailPojo.setSent( true );
             System.out.println( "邮件发送成功!" );
             
         } catch (Exception e) {
             e.printStackTrace();
             mailPojo.setSent( false );
             // TODO: handle exception
         }
//      dao.create(mail) 进行持久化,如果有这一步的话
     }
 
     /**
      * struts 2 会将文件自动上传到临时文件夹中,Action运行完毕后临时文件会被自动删除 因此需要将文件复制到 /upload 文件夹下
      *
      * @param files
      * @param names
      * @return
      */
     public File[] saveFiles(File[] files, String[] names) {
         if (files == null )
             return null ;
         File root = new File(ServletActionContext.getServletContext().getRealPath(FOLDER_NAME));
         File[] destinies = new File[files.length];
         for ( int i = 0 ; i < files.length; i++) {
             File file = files[i];
             File destiny = new File(root, names[i]);
             destinies[i] = destiny;
             copyFile(file, destiny);
         }
         return destinies;
     }
 
     /**
      * 复制单个文件
      *
      * @param from
      * @param to
      */
     public void copyFile(File from, File to) {
         InputStream ins = null ;
         OutputStream ous = null ;
         try {
             // 创建所有上级文件夹
             to.getParentFile().mkdirs();
             ins = new FileInputStream(from);
             ous = new FileOutputStream(to);
             byte [] b = new byte [ 1024 ];
             int len;
             while ((len = ins.read(b)) != - 1 ) {
                 ous.write(b, 0 , len);
             }
         } catch (Exception e) {
             // TODO: handle exception
         } finally {
             if (ous != null )
                 try {
                     ous.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             if (ins != null )
                 try {
                     ins.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
         }
     }
 
     public void setServletResponse(HttpServletResponse httpservletresponse) {
         this .response = httpservletresponse;
     }
 
     public void setServletRequest(HttpServletRequest httpservletrequest) {
         this .request = httpservletrequest;
     }
 
     public void setSession(Map<String, Object> session) {
         this .session = session;
     }
 
     public JavaMailSenderImpl getMailSender() {
         return mailSender;
     }
 
     public void setMailSender(JavaMailSenderImpl mailSender) {
         this .mailSender = mailSender;
     }
 
     public File[] getAttachment() {
         return attachment;
     }
 
     public void setAttachment(File[] attachment) {
         this .attachment = attachment;
     }
 
     public String[] getAttachmentFileName() {
         return attachmentFileName;
     }
 
     public void setAttachmentFileName(String[] attachmentFileName) {
         this .attachmentFileName = attachmentFileName;
     }
 
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值