spring smtp_使用Spring使用Java发送电子邮件– GMail SMTP服务器示例

spring smtp

对于使用Java发送电子邮件, JavaMail API是标准解决方案。 如官方网页所述,“ JavaMail API提供了独立于平台和协议的框架来构建邮件和消息传递应用程序”。 必需的类包含在JavaEE平台中,但是要在独立的JavaSE应用程序中使用它,您必须从这里下载相应的JAR。

注意:除非您使用的是Java SE 6,否则还需要提供javax.activation包的JavaBeans Activation Framework(JAF)扩展。 我们建议您使用最新版本的JAF 1.1.1版本。 JAF包含在Java SE 6中。

不幸的是,JavaMail可能有点笨拙,并且难以配置和使用。 如果您已经为应用程序拥抱了Spring框架 ,您将很高兴发现Spring提供了一个邮件抽象层。 如参考文档所述,“ Spring框架提供了一个有用的实用程序库,用于发送电子邮件,该电子邮件使用户免受底层邮件系统的限制,并负责代表客户端进行低级资源处理。” 太好了,现在让我们看看如何利用这个库。

首先,创建一个名为“ SpringMailProject”的新Eclipse项目。 在项目的类路径中,确保包括以下库(请注意,使用的是3.0.2.RELEASE Spring版本):

  • mail.jar(JavaMail的核心类)
  • org.springframework.asm-3.0.2.RELEASE.jar
  • org.springframework.beans-3.0.2.RELEASE.jar
  • org.springframework.context.support-3.0.2.RELEASE.jar
  • org.springframework.core-3.0.2.RELEASE.jar
  • org.springframework.expression-3.0.2.RELEASE.jar
  • com.springsource.org.apache.commons.logging-1.1.1.jar

注意1:需要Apache的commons-logging库,该库包含在classpath中
注意2:如果您使用的是Java 1.5或更早版本,则还需要Java激活框架。

我们将使用MailSender ,这是一个Spring接口,用于定义发送简单邮件的策略。 由于这只是一个接口,因此我们需要一个具体的实现,它以JavaMailSenderImpl的形式出现。 此类同时支持JavaMail MimeMessage和Spring SimpleMailMessage 。

我们将创建一个简单的Spring服务,该服务将用于发送邮件。 一种方法将在现场创建SimpleMailMessage ,而另一种方法将使用预配置的默认消息。 该服务的源代码如下:

package com.javacodegeeks.spring.mail;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;@Service("mailService")
public class MailService {@Autowiredprivate MailSender mailSender;@Autowiredprivate SimpleMailMessage alertMailMessage;public void sendMail(String from, String to, String subject, String body) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(to);message.setSubject(subject);message.setText(body);mailSender.send(message);}public void sendAlertMail(String alert) {SimpleMailMessage mailMessage = new SimpleMailMessage(alertMailMessage);mailMessage.setText(alert);mailSender.send(mailMessage);}}

该类只是一个POJO,其服务名称为“ mailService”,由构造型Service批注标记。 使用的bean接线策略是自动装配的一种,因此使用了Autowired注释。 注意,可以使用bean的名称和类型来执行自动装配。

引导容器的相应Spring XML文件如下:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
><context:component-scan base-package="com.javacodegeeks.spring.mail" />    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="smtp.gmail.com"/><property name="port" value="25"/><property name="username" value="myusername@gmail.com"/><property name="password" value="mypassword"/><property name="javaMailProperties"><props><!-- Use SMTP transport protocol --><prop key="mail.transport.protocol">smtp</prop><!-- Use SMTP-AUTH to authenticate to SMTP server --><prop key="mail.smtp.auth">true</prop><!-- Use TLS to encrypt communication with SMTP server --><prop key="mail.smtp.starttls.enable">true</prop><prop key="mail.debug">true</prop></props></property></bean><bean id="alertMailMessage" class="org.springframework.mail.SimpleMailMessage"><property name="from">            <value>myusername@gmail.com</value></property><property name="to">            <value>myusername@gmail.com</value></property><property name="subject" value="Alert - Exception occurred. Please investigate"/></bean></beans>

这是一个非常简单的Spring配置文件。 不过,有些事情要提:

  • 声明将从其开始上下文扫描的基本软件包,并将其设置为“ com.javacodegeeks.spring.mail”。
  • 声明了“ mailSender” bean,并适当设置了其一堆属性(使用您自己的SMTP服务器配置属性和凭据)。
  • “ alertMailMessage”是预先配置的Spring SimpleMailMessage,将使用“按名称自动装配”将其注入“ MailService”类中。

如果您希望使用Gmail的SMTP服务器,请确保正确配置了以下JavaMail属性:

host=smtp.gmail.com
port=25
username=your-gmail-username
password=your-gmail-password
mail.transport.protocol=smtp
mail.smtp.auth=true
mail.smtp.starttls.enable=true

在开发阶段,如果希望邮件客户端生成信息日志,请将“ mail.debug”设置为true。 但是,请记住在生产时将其设置为false,因为日志量可能会降低应用程序的性能和/或填充硬盘。

最后,我们创建一个类,该类将用于创建Spring容器并测试我们创建的简单邮件服务。 源代码如下:

package com.javacodegeeks.spring.mail;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;public class MailServiceTest {public static void main(String[] args) {ApplicationContext context = new FileSystemXmlApplicationContext("conf/spring.xml");MailService mailService = (MailService) context.getBean("mailService");mailService.sendMail("myusername@gmail.com", "myusername@gmail.com", "Testing123", "Testing only \n\n Hello Spring Email Sender");mailService.sendAlertMail("Exception occurred");}}

FileSystemXmlApplicationContext类用作ApplicationContext 。 我们在构造函数中传递Spring的XML文件位置,该类创建容器,实例化Bean并处理依赖项。 你不爱春天吗? 接下来,我们使用“ getBean ”方法检索“ MailService”服务的引用,并调用这两个方法。

就这样。 与往常一样,您可以从此处下载完整的Eclipse项目。

相关文章 :
  • 依赖注入–手动方式
  • 使用Spring Security保护GWT应用程序的安全
  • 具有Spring和Maven教程的JAX–WS
  • 建立自己的GWT Spring Maven原型
  • 使用Spring AspectJ和Maven进行面向方面的编程
  • Spring 3 RESTful Web服务
  • JBoss 4.2.x Spring 3 JPA Hibernate教程

翻译自: https://www.javacodegeeks.com/2010/07/java-mail-spring-gmail-smtp.html

spring smtp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why

问题描述在uboot里面屏蔽了MMU 使能//#define CONFIG_ENABLE_MMU就导致android 2.3 在S5pv210 上不稳定了&#xff0c;如果没屏蔽就稳定很多&#xff0c;why&#xff1f;&#xff01;坑爹的人啊&#xff0c;问了一些做了几年linux和android的人说没影响的&#xff0c;啥玩意啊&…

Java 9中的5个功能将改变您开发软件的方式(还有2个不会)

有望在Java 9中发布的最令人兴奋的功能是什么&#xff1f; 不要对Java 9的相对沉默近来分散注意力。JDK提交者正在努力准备下一个版本&#xff0c;该版本预计将在2015年12月完成&#xff0c;而功能将在几个月后完成 。此后&#xff0c;它将通过严格的测试和错误修复了将其计划…

eclipse远程tomcat javaweb debug样例(windows)

1.tomcat配置可被远程debug端口参数 catalina.bat 中添加 set CATALINA_OPTS-Xdebug -agentlib:jdwptransportdt_socket,servery,suspendn,address8000 导出项目war包到tomcat/webapps/目录下 切换到tomcat/bin目录下 双击startup.bat启动运行项目 2.eclipse中启动远程debug…

总账分录追溯发票或者付款

--总账分录追溯发票 SELECT DISTINCT AIA.*FROM AP_AE_HEADERS_ALL AAH, --帐户分录头表AP_AE_LINES_ALL AAL, --账户分录行表&#xff0c;每一个会计事件都会在此表中产生会计分录GL_JE_BATCHES GJB,GL_JE_HEADERS GJH,GL_JE_LINES GJL,AP_INVOICES_ALL …

mysqlDM判断字符串中是否存在非中文

MYSQL判断字符串是否全中文 正则表达式匹配[一-龥]中文字符[ a-zA-Z]英文字母[ 0-9]数字[ぁ-ゞァ-ヾ]日文字符1.查询存在非中文的记录 &#xff1a;select * from tablename where columnname REGEXP [^一-龥]; 2.查询存在中文的记录&#xff1a;select * from columnname wh…

ASP.NET MVC的ContentResult

ASP.NET MVC的ContentResult返回简单的纯文本内容&#xff0c;可通过ContentType属性指定应答文档类型&#xff0c;通过ContentEncoding属性指定应答文档的字符编码。一个例子来演习&#xff0c;自定义一个RwResult&#xff0c;它继承ContentResult&#xff0c;为视图象ASP.NET…

windows搜索指定目录下包含某个字符串的文件

1.打开cmd窗口 &#xff1a;winr 快捷键-> 输入cmd 回车 2.切换到被搜索的文件夹&#xff08;E:\shgwy文档\日常\更新\20220808&#xff09;下 如输入&#xff1a; cd E:\shgwy文档\日常\更新\20220808 e: 3.输入搜索命令 c:\Windows\System32\findstr.exe /s /i "wa…

IIS7日志文件位置

准备统计下页面访问量 查找IIS日志,发现在以前IIS6日志的位置&#xff0c;竟然木有找到日志... 查看下IIS设置&#xff0c;发现IIS7和6的默认日志位置不一样额... IIS 6 Log files location IIS 6中日志文件的位置 %windir%\System32\LogFiles IIS 7 Log files location IIS的日…

编写下载服务器。 第二部分:标头:Last-Modified,ETag和If-None-Match

客户端缓存是万维网的基础之一。 服务器应告知客户端资源的有效性&#xff0c;客户端应尽可能快地对其进行缓存。 如我们所见&#xff0c;如果不缓存Web&#xff0c;将会非常慢。 只需在任何网站上Ctrl F5并将其与普通F5进行比较-后者就会更快&#xff0c;因为它使用了已缓存的…

jwt重放攻击_4个点搞懂JWT、JWS、JWE

1.JWT是何物&#xff0c;有哪些常用的场景JWT(json web token)是设计一种简洁&#xff0c;安全&#xff0c;无状态的token的实现规范rfc7519&#xff0c;通常用于网络请求方和网络接收方之间的网络请求认证。jwt的常用场景1.1: restful api接口的无状态认证, 在传统的web应用中…

Verification Mind Games---how to think like a verifier像验证工程师一样思考

1. 有效的验证需要验证工程师使用不同于设计者的思维方式思考问题。具体来说&#xff0c;验证更加关心在严格遵循协议的基础上发现设计里面的bug&#xff0c;搜索corner cases&#xff0c;对设计的不一致要保持零容忍的态度。mindset&#xff1a;一套人们应该持有的确定的态度&…

discuz安装_手动搭建 Discuz! 论坛

一、搭建LAMP环境安装软件(Apache、MariaDB、PHP)yum install httpd php php-fpm php-mysql mariadb mariadb-server -y2.启动服务systemctl start httpdsystemctl start mariadbsystemctl start php-fpm3.安装后首次启动mariadb设置mysql_secure_installation4.登录 MariaDB&a…

关系数据库的几种设计范式介绍

关系数据库的几种设计范式介绍1、第一范式&#xff08;1NF&#xff09; 在任何一个关系数据库中&#xff0c;第一范式&#xff08;1NF&#xff09;是对关系模式的基本要求&#xff0c;不满足第一范式&#xff08;1NF&#xff09;的数据库就不是关系数据库。 所谓…

蓝桥杯 1223 第 2 场 小白入门赛

蓝桥小课堂-平方和 模拟 1 2 2 2 3 2 ⋯ n 2 n ⋅ ( n 1 ) ⋅ ( 2 n 1 ) 6 1^22^23^2\cdotsn^2\dfrac{n\;\cdot\;(n 1)\;\cdot\;(2n1)}{6} 122232⋯n26n⋅(n1)⋅(2n1)​。 write(n * (n 1) * (n * 2 1) / 6);房顶漏水啦 m a x ( 最大的行 − 最小的行 , 最大的列 −…

jar包是什么意思_面试难度五颗星:JVM有Full GC,为什么还会 OutOfMemoryError?

点击上方蓝色“后端面试那些事儿”&#xff0c;选择“设为星标”学最好的别人&#xff0c;做最好的我们来源&#xff1a;R 大zhihu.com/question/38511221问题&#xff1a;R大回复平时有逛知乎的习惯&#xff0c;一般对JVM相关话题比较感兴趣。偶然看到这个问题&#xff0c;结果…

mapreduce介绍_MapReduce:简单介绍

mapreduce介绍MapReduce是Google流行的一种并行编程技术。 它用于处理大量数据。 仅通过将工作并行分配给多台机器&#xff0c;就可以在合理的时间内完成这种处理。 每台机器都处理一小部分数据。 MapReduce是一种编程模型&#xff0c;使开发人员可以专注于编写处理数据的代码&…

系统执行sql很慢达梦工具执行很快的简单解决方式

现象描述&#xff1a;系统功能查询很慢&#xff0c;拷贝查询sql到达梦工具中执行速度很快 1.问题分析&#xff1a; 达梦SQL执行耗时异常问题排查_qq_39693441的博客-CSDN博客_sql耗时分析 2.解决方式1&#xff1a; 在程序sql中拼接随机数如&#xff1a; select /*动态随机数*…

PHP在程序处理过程中动态输出内容

在安装discuz或其他一些开源产品的时候&#xff0c;在安装数据库时页面上的安装信息都是动态输出出来的&#xff0c;主要通过php两个函数来实现的&#xff0c; flush();ob_flush(); 代码如下 <html xmlns"http://www.w3.org/1999/xhtml"><head> <meta…

roads 构筑极致用户体验_长安马自达「悦马星空」计划上线,为用户带来极致服务体验...

日前,第十八届广州车展顺利举行。期间各大汽车品牌齐聚亮相,这其中,也包括众人熟悉的长安马自达。据悉,在本次车展上,长安马自达除携品牌全系车型次世代MAZDA3 昂克赛拉、2020款MAZDA CX-5、MAZDA CX-30和MAZDA CX-8亮相外,还正式发布「悦马星空」用户共创计划。资料显示,「悦马…

从数百万个光纤(而不是数千个线程)中查询数据库

jOOQ是在Java中执行SQL的好方法&#xff0c; Quasar光纤带来了大大提高的并发性 我们很高兴在平行宇宙的 Fabio Tudone的jOOQ博客上宣布另一个非常有趣的来宾帖子。 Parallel Universe开发了一个开源堆栈&#xff0c;使开发人员可以轻松地在JVM上对极端的并发应用程序进行编码…