Gmail
邮件发送配置
email.properties 文件:
# Gmail Configuration
email.host=smtp.gmail.com
email.port=587
email.username=******
email.password=******
email.defaultEncoding=UTF-8
applicationContext.xml 文件:
<!-- Email Service -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${email.host}"/>
<property name="port" value="${email.port}"/>
<property name="username" value="${email.username}"/>
<property name="password" value="${email.password}"/>
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.smtp.host">smtp.gmail.com</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.port">465
</prop>
</props>
<!--
<value>
mail.smtp.auth=true
</value>
-->
</property>
<property name="defaultEncoding" value="${email.defaultEncoding}"></property>
</bean>
<bean id="emailSender" class="com.tucue.common.util.SimpleEmailSender">
<property name="mailSender" ref="mailSender"></property>
</bean>
<!-- end of Email Service -->
FAQ
:
com
.sun
.mail
.smtp
.SMTPSendFailedException: 530
5
.7
.
0
Must
issue
a
STARTTLS
command
first
.
A
:
<prop key="mail.smtp.starttls.enable">true</prop>
Send Batch Mail
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/mail/MailSender
.html
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/mail/javamail/JavaMailSender
.html
Method Summary
MimeMessage
|
createMimeMessage
()
Create a new JavaMail MimeMessage
for the underlying JavaMail Session
of this sender.
|
MimeMessage
|
createMimeMessage
(InputStream
contentStream)
Create a new JavaMail MimeMessage for the underlying JavaMail Session
of this sender, using the given input stream as the message source.
|
void
|
send
(MimeMessage
mimeMessage)
Send the given JavaMail MIME message
.
|
void
|
send
(MimeMessage
[] mimeMessages)
Send the given array
of JavaMail MIME messages in batch
.
|
void
|
send
(MimeMessagePreparator
mimeMessagePreparator)
Send the JavaMail MIME message prepared by the given MimeMessagePreparator.
|
void
|
send
(MimeMessagePreparator
[] mimeMessagePreparators)
Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.
|
方案一:首先获取要发送邮件的所有地址,然后迭代的封装单个 MimeMessage
之后就将其发送出去(即发送一封邮件)。
SimpleEmailSender.java 文件
/**
* 功能: 传入邮件接收者地址、标题和内容,然后发送单个邮件服务
* @param {@link String} emailAddress
* @param {@link String} subject
* @param {@link String} content
* @throws MessagingException
*/
public static void sendSimpleEmail(String receiver
, String subject, String content) throws MessagingException {
JavaMailSender sender = (JavaMailSender) mailSender;
MimeMessage mimeMessage
= sender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setFrom("***@gmail
.com");
messageHelper.setTo(receiver);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
sender.send(mimeMessage
);
}
UserInfoAction.java 文件
// 用户 -> 批量邮件发送
public String sendBatchEmail() {
if(!emailReceiverList.equals("")) { // 发送用户邮件
// String[] receiverList = emailReceiverList.split(",");
String[] receiverList = new String[20];
for(int i = 0; i < 20; ++i) {
receiverList[i] = "shupili141005@126.com";
}
long start = System.currentTimeMillis();
for(String receiver: receiverList
) {
try {
SimpleEmailSender.sendSimpleEmail(receiver, emailSubject, emailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
} else {// 发送用户组邮件
List<String> receiverList = userInfoService.getUserEmailByGroupId(groupID);
for(String receiver: receiverList) {
try {
SimpleEmailSender.sendSimpleEmail(receiver, emailSubject, emailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
方案二:首先获取要发送邮件的所有地址,然后一起封装成 MimeMessage[]
之后就将其发送出去(即批量发送所有要发送的邮件)。
SimpleEmailSender.java 文件
/**
* 功能: 传入邮件接收者地址列表、标题和内容,然后发送批量邮件服务
* @param {@link List<String>} receiverList
* @param {@link String} subject
* @param {@link String} content
* @throws MessagingException
*/
public static void sendBulkEmail(List<String> receiverList
, String subject, String content) throws MessagingException {
JavaMailSender sender = (JavaMailSender) mailSender;
int len = receiverList.size();
MimeMessage[] mimeMessageList
= new MimeMessage[len]; // 注意:是数组类型
MimeMessageHelper messageHelper = null;
for(int i = 0; i < len; ++i) {
mimeMessageList[i]
= sender.createMimeMessage();
messageHelper = new MimeMessageHelper(mimeMessageList[i], true, "UTF-8");
messageHelper.setFrom("tucueservice@gmail.com");
messageHelper.setTo(receiverList.get(i));
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
}
sender.send(mimeMessageList
);
}
UserInfoAction.java 文件
// 用户 -> 批量邮件发送
public String sendBatchEmail() {
if(!emailReceiverList.equals("")) { // 发送用户邮件
// String[] receiverList = emailReceiverList.split(",");
List<String> receiverList
= new ArrayList<String>(20);
for(int i = 0; i < 20; ++i) {
receiverList.add("shupili141005@126.com");
}
long start = System.currentTimeMillis();
try {
// SimpleEmailSender.sendBulkEmail(Arrays.asList(receiverList), emailSubject, emailContent);
SimpleEmailSender.sendBulkEmail(receiverList
, emailSubject, emailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println(end - start);
} else {// 发送用户组邮件
List<String> receiverList = userInfoService.getUserEmailByGroupId(groupID);
try {
SimpleEmailSender.sendBulkEmail(receiverList, emailSubject, emailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
}
return SUCCESS;
}
根据上述两种方案,通过发送 20 封邮件进行测试后发,发现第二种方案(用时 36984 ms)比第一种(81266 ms)的
执行效率 2.1 倍多
。
总结
通过这次实验,感觉自己收获了不少。第一,评价哪种方案优劣,用你需要的数据测试就能体现执行效率,但健壮性和可扩展性就不能一概而论了;第二,要想编写更加高效的代码,就必须对你特别重要(特别是常用基础类)的 API 有足够的熟知。就以这个案例为例,刚开始我没有仔细看过
JavaMailSender
的 API ,导致就不知道用
send
(MimeMessage
[] mimeMessages) 这个函数,所以也不知道存在第二种方案。后来突然发现有这个函数,就像能不能对先前的发送单个邮件服务加以改进,第二种方案也就是这样萌生的。
分享到:
相关推荐
Java发送邮件功能是Java开发中常见的一项任务,它允许...这两个库的结合,使得在Java应用中实现邮件发送变得非常便捷和高效。在处理复杂的邮件需求,如模板邮件、定时发送、批量发送等场景下,这样的组合尤为适用。
总结,这个项目实例展示了如何利用SpringBoot的便捷性和ActiveMQ的高效通信能力,实现一个异步的邮件发送服务。通过阅读和理解这个项目,开发者可以学习到SpringBoot的整合技巧,以及消息中间件在实际业务场景中的...
因此,Spring框架针对这一痛点提供了更加简洁高效的邮件发送支持。 JavaMail没有被内置于JDK中,而是作为Java EE平台的一部分存在。不同厂商可以根据需求选择性地实现JavaMail规范中的部分或全部协议,例如: - **...
此外,跟踪邮件发送状态和接收者的反馈也很重要,以便评估邮件活动的效果并进行优化。 综上所述,邮件模板发送是现代通信中不可或缺的一部分,它结合了HTML模板设计和编程技术,实现了高效、个性化的邮件批量发送。...
通过上述技术的整合,"mvc定时发邮件"项目提供了一种高效且灵活的定时邮件发送解决方案,适用于各种需要定期通知或报告的应用场景。开发者可以根据自己的需求,对该项目进行定制化改造,以满足特定业务需求。
在本文中,我们将深入探讨...通过以上步骤,你已经成功地使用Spring Boot结合AWS SES实现了邮件发送功能。这个解决方案不仅简单易用,而且能够轻松地集成到现有的Spring Boot应用中,提供可靠且高效的电子邮件服务。
- **邮件发送:** 解释了如何使用 Spring Integration 发送电子邮件。 - **邮件接收:** 讨论了如何接收电子邮件并将其转化为消息流的一部分。 - **邮件集成示例:** 提供了一个实际的邮件集成案例研究。 **11: ...
### Spring结合JavaMail开发文档知识点...通过上述知识点的学习,开发者可以更加高效地利用Spring与JavaMail组合来实现邮件发送的功能,无论是简单的纯文本邮件还是复杂的HTML邮件甚至是带有附件的邮件都能轻松应对。
【JSP邮件群发系统】是一种基于Java Server Pages(JSP)技术构建的电子邮件...以上就是基于JSP的邮件群发系统的主要组成和工作原理,通过这样的系统,企业或组织可以高效、批量地发送电子邮件,实现信息的快速传递。
// 具体业务逻辑,如检查获奖情况并发送邮件通知等 } } ``` #### 3.2 配置定时任务 接下来,在Spring的配置文件中定义`CheckWinner`类的Bean,并将其作为`timerTask`属性值传递给`ScheduledTimerTask` Bean: ```...
Spring作为Java领域最流行的轻量级框架之一,提供了丰富的功能,而定时任务是许多应用程序必不可少的一部分,例如执行日志清理、数据同步或者发送邮件等周期性操作。 在Spring中,定时任务的实现主要依赖于两个核心...
在IT行业中,集成ActiveMQ、Spring以及Spring MVC是构建高效、可扩展的Web应用程序的常见实践。这个"activeMQ+spring+springmvc整合示例"旨在帮助开发者理解如何将这三者结合,以实现消息队列(Message Queue)的...
邮件发送同样需要集成SMTP服务器,支持HTML格式的邮件内容,提供群发、定时发送等功能,并能处理退信和报告。 10. **整合与兼容性**:短信和邮件功能应无缝融入整个系统架构,与其他模块如用户管理、订单系统等良好...
对于耗时的操作,如批量处理、发送邮件通知等,可以采用异步处理,以提高系统的响应速度。Spring的Task或者集成RabbitMQ、Kafka等消息队列可以实现此功能。 **9. 页面模板与前端技术** 项目可能采用Thymeleaf、...
旅游网站可能会涉及邮件发送功能,如确认订单、发送优惠券等。SpringBoot可以集成JavaMailSender接口,轻松实现邮件的发送。 8. 异步任务处理 对于后台批量处理或耗时任务,SpringBoot的Async注解可以帮助开发者...
1. 异步处理:利用Spring Boot的异步方法支持,优化高并发场景下的性能,如批量发送预约确认邮件或短信。 2. 分布式事务:在微服务架构下,可能涉及跨服务的事务操作,可以采用分布式事务解决方案,如Seata,确保...
Mailsy电子邮件传递渠道是一个专为Java开发者设计的高效、可靠的邮件发送解决方案。这个系统的主要目的是简化企业级应用中的电子邮件发送流程,确保邮件能够准确、及时地送达目标收件人。下面将详细介绍Mailsy电子...
5. **性能优化**:提供关于提高邮件发送效率的建议,比如批量发送邮件、设置延迟发送等。 6. **安全指南**:提醒用户注意邮件发送的安全问题,如防止邮件欺诈、保护用户隐私等。 7. **集成指南**:如果w3jmail4_cn...