当前位置: 首页 > news >正文

网站链接跳转如何做厦门网站制作费用明细

网站链接跳转如何做,厦门网站制作费用明细,做外贸常用那几个网站,wordpress花园官网文档#xff1a;39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例#xff0c;用于发送邮件。 如果SpringBoot项目中包含了相关的启动器#xff0c;那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例用于发送邮件。 如果SpringBoot项目中包含了相关的启动器那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器 !-- spring-boot-starter-mail-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-mail/artifactId /dependency 核心接口和类 核心接口:MailSender org.springframework.mail是邮件发送依赖的顶级包其中提供了邮件发送的核心接口MailSender该接口提供了两个方法分别用于指定逐个邮件发送、批量邮件发送。 package org.springframework.mail;/*** This interface defines a strategy for sending simple mails. Can be* implemented for a variety of mailing systems due to the simple requirements.* For richer functionality like MIME messages, consider JavaMailSender.** pAllows for easy testing of clients, as it does not depend on JavaMails* infrastructure classes: no mocking of JavaMail Session or Transport necessary.*/ public interface MailSender {/*** Send the given simple mail message.-发送简单邮件* param simpleMessage the message to send* throws MailParseException in case of failure when parsing the message* throws MailAuthenticationException in case of authentication failure* throws MailSendException in case of failure when sending the message*/void send(SimpleMailMessage simpleMessage) throws MailException;/*** Send the given array of simple mail messages in batch.-批量发送一组简单邮件* param simpleMessages the messages to send* throws MailParseException in case of failure when parsing a message* throws MailAuthenticationException in case of authentication failure* throws MailSendException in case of failure when sending a message*/void send(SimpleMailMessage... simpleMessages) throws MailException;}可以看到其实JavaMailSender接口也作为它的子接口存在并且内置了一个实现类JavaMailSenderImpl可以供我们直接使用。 邮件消息接口:MailMessage 邮件消息接口规定一封电子邮件对应的组成元素内置了简单邮件消息和媒体邮件消息两个实现子类。 package org.springframework.mail;import java.util.Date;/*** This is a common interface for mail messages, allowing a user to set key* values required in assembling a mail message, without needing to know if* the underlying message is a simple text message or a more sophisticated* MIME message.** pImplemented by both SimpleMailMessage and MimeMessageHelper,* to let message population code interact with a simple message or a* MIME message through a common interface.*/ public interface MailMessage {void setFrom(String from) throws MailParseException;void setReplyTo(String replyTo) throws MailParseException;void setTo(String to) throws MailParseException;void setTo(String... to) throws MailParseException;void setCc(String cc) throws MailParseException;void setCc(String... cc) throws MailParseException;void setBcc(String bcc) throws MailParseException;void setBcc(String... bcc) throws MailParseException;void setSentDate(Date sentDate) throws MailParseException;void setSubject(String subject) throws MailParseException;void setText(String text) throws MailParseException;}简单邮件对象:SimpleMailMessage  可以用来囊括简单邮件信息的类是SimpleMailMessage类邮件主体内容以简单文本形式为主。 A simple value object that encapsulates the properties of a simple mail such as from and to (plus many others) is the SimpleMailMessage class.  该类的源码如下  package org.springframework.mail;import java.io.Serializable; import java.util.Date;import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils;/*** Models a simple mail message, including data such as the from, to, cc, subject,* and text fields.** pConsider {code JavaMailSender} and JavaMail {code MimeMessages} for creating* more sophisticated messages, for example messages with attachments, special* character encodings, or personal names that accompany mail addresses.** author Dmitriy Kopylenko* author Juergen Hoeller* since 10.09.2003* see MailSender* see org.springframework.mail.javamail.JavaMailSender* see org.springframework.mail.javamail.MimeMessagePreparator* see org.springframework.mail.javamail.MimeMessageHelper* see org.springframework.mail.javamail.MimeMailMessage*/ SuppressWarnings(serial) public class SimpleMailMessage implements MailMessage, Serializable {Nullableprivate String from;Nullableprivate String replyTo;Nullableprivate String[] to;Nullableprivate String[] cc;Nullableprivate String[] bcc;Nullableprivate Date sentDate;Nullableprivate String subject;Nullableprivate String text;/*** Create a new {code SimpleMailMessage}.*/public SimpleMailMessage() {}/*** Copy constructor for creating a new {code SimpleMailMessage} from the state* of an existing {code SimpleMailMessage} instance.*/public SimpleMailMessage(SimpleMailMessage original) {Assert.notNull(original, original message argument must not be null);this.from original.getFrom();this.replyTo original.getReplyTo();this.to copyOrNull(original.getTo());this.cc copyOrNull(original.getCc());this.bcc copyOrNull(original.getBcc());this.sentDate original.getSentDate();this.subject original.getSubject();this.text original.getText();}Overridepublic void setFrom(String from) {this.from from;}Nullablepublic String getFrom() {return this.from;}Overridepublic void setReplyTo(String replyTo) {this.replyTo replyTo;}Nullablepublic String getReplyTo() {return this.replyTo;}Overridepublic void setTo(String to) {this.to new String[] {to};}Overridepublic void setTo(String... to) {this.to to;}Nullablepublic String[] getTo() {return this.to;}Overridepublic void setCc(String cc) {this.cc new String[] {cc};}Overridepublic void setCc(String... cc) {this.cc cc;}Nullablepublic String[] getCc() {return this.cc;}Overridepublic void setBcc(String bcc) {this.bcc new String[] {bcc};}Overridepublic void setBcc(String... bcc) {this.bcc bcc;}Nullablepublic String[] getBcc() {return this.bcc;}Overridepublic void setSentDate(Date sentDate) {this.sentDate sentDate;}Nullablepublic Date getSentDate() {return this.sentDate;}Overridepublic void setSubject(String subject) {this.subject subject;}Nullablepublic String getSubject() {return this.subject;}Overridepublic void setText(String text) {this.text text;}Nullablepublic String getText() {return this.text;}/*** Copy the contents of this message to the given target message.* param target the {code MailMessage} to copy to*/public void copyTo(MailMessage target) {Assert.notNull(target, target MailMessage must not be null);if (getFrom() ! null) {target.setFrom(getFrom());}if (getReplyTo() ! null) {target.setReplyTo(getReplyTo());}if (getTo() ! null) {target.setTo(copy(getTo()));}if (getCc() ! null) {target.setCc(copy(getCc()));}if (getBcc() ! null) {target.setBcc(copy(getBcc()));}if (getSentDate() ! null) {target.setSentDate(getSentDate());}if (getSubject() ! null) {target.setSubject(getSubject());}if (getText() ! null) {target.setText(getText());}}Overridepublic boolean equals(Nullable Object other) {if (this other) {return true;}if (!(other instanceof SimpleMailMessage)) {return false;}SimpleMailMessage otherMessage (SimpleMailMessage) other;return (ObjectUtils.nullSafeEquals(this.from, otherMessage.from) ObjectUtils.nullSafeEquals(this.replyTo, otherMessage.replyTo) ObjectUtils.nullSafeEquals(this.to, otherMessage.to) ObjectUtils.nullSafeEquals(this.cc, otherMessage.cc) ObjectUtils.nullSafeEquals(this.bcc, otherMessage.bcc) ObjectUtils.nullSafeEquals(this.sentDate, otherMessage.sentDate) ObjectUtils.nullSafeEquals(this.subject, otherMessage.subject) ObjectUtils.nullSafeEquals(this.text, otherMessage.text));}Overridepublic int hashCode() {int hashCode ObjectUtils.nullSafeHashCode(this.from);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.replyTo);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.to);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.cc);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.bcc);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.sentDate);hashCode 29 * hashCode ObjectUtils.nullSafeHashCode(this.subject);return hashCode;}Overridepublic String toString() {StringBuilder sb new StringBuilder(SimpleMailMessage: );sb.append(from).append(this.from).append(; );sb.append(replyTo).append(this.replyTo).append(; );sb.append(to).append(StringUtils.arrayToCommaDelimitedString(this.to)).append(; );sb.append(cc).append(StringUtils.arrayToCommaDelimitedString(this.cc)).append(; );sb.append(bcc).append(StringUtils.arrayToCommaDelimitedString(this.bcc)).append(; );sb.append(sentDate).append(this.sentDate).append(; );sb.append(subject).append(this.subject).append(; );sb.append(text).append(this.text);return sb.toString();}Nullableprivate static String[] copyOrNull(Nullable String[] state) {if (state null) {return null;}return copy(state);}private static String[] copy(String[] state) {return state.clone();}}媒体邮件对象:MimeMailMessage MemeMailMessage表示媒体邮件对象可以实现自定义邮件模板的动态填充和邮件发送。 /** Copyright 2002-2017 the original author or authors.** Licensed under the Apache License, Version 2.0 (the License);* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** https://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an AS IS BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package org.springframework.mail.javamail;import java.util.Date;import javax.mail.MessagingException; import javax.mail.internet.MimeMessage;import org.springframework.mail.MailMessage; import org.springframework.mail.MailParseException;/*** Implementation of the MailMessage interface for a JavaMail MIME message,* to let message population code interact with a simple message or a MIME* message through a common interface.** pUses a MimeMessageHelper underneath. Can either be created with a* MimeMessageHelper instance or with a JavaMail MimeMessage instance.** author Juergen Hoeller* since 1.1.5* see MimeMessageHelper* see javax.mail.internet.MimeMessage*/ public class MimeMailMessage implements MailMessage {private final MimeMessageHelper helper;/*** Create a new MimeMailMessage based on the given MimeMessageHelper.* param mimeMessageHelper the MimeMessageHelper*/public MimeMailMessage(MimeMessageHelper mimeMessageHelper) {this.helper mimeMessageHelper;}/*** Create a new MimeMailMessage based on the given JavaMail MimeMessage.* param mimeMessage the JavaMail MimeMessage*/public MimeMailMessage(MimeMessage mimeMessage) {this.helper new MimeMessageHelper(mimeMessage);}/*** Return the MimeMessageHelper that this MimeMailMessage is based on.*/public final MimeMessageHelper getMimeMessageHelper() {return this.helper;}/*** Return the JavaMail MimeMessage that this MimeMailMessage is based on.*/public final MimeMessage getMimeMessage() {return this.helper.getMimeMessage();}Overridepublic void setFrom(String from) throws MailParseException {try {this.helper.setFrom(from);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setReplyTo(String replyTo) throws MailParseException {try {this.helper.setReplyTo(replyTo);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setTo(String to) throws MailParseException {try {this.helper.setTo(to);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setTo(String... to) throws MailParseException {try {this.helper.setTo(to);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setCc(String cc) throws MailParseException {try {this.helper.setCc(cc);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setCc(String... cc) throws MailParseException {try {this.helper.setCc(cc);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setBcc(String bcc) throws MailParseException {try {this.helper.setBcc(bcc);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setBcc(String... bcc) throws MailParseException {try {this.helper.setBcc(bcc);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setSentDate(Date sentDate) throws MailParseException {try {this.helper.setSentDate(sentDate);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setSubject(String subject) throws MailParseException {try {this.helper.setSubject(subject);}catch (MessagingException ex) {throw new MailParseException(ex);}}Overridepublic void setText(String text) throws MailParseException {try {this.helper.setText(text);}catch (MessagingException ex) {throw new MailParseException(ex);}}}异常接口:MailException This package also contains a hierarchy of checked exceptions that provide a higher level of abstraction over the lower level mail system exceptions, with the root exception being MailException. Mail是邮件发送的异常处理根接口源码如下 SuppressWarnings(serial) public abstract class MailException extends NestedRuntimeException {/*** Constructor for MailException.* param msg the detail message*/public MailException(String msg) {super(msg);}/*** Constructor for MailException.* param msg the detail message* param cause the root cause from the mail API in use*/public MailException(Nullable String msg, Nullable Throwable cause) {super(msg, cause);}} 当然它也内置了一系列子接口 基本含义如下  MailSendException邮件发送失败异常 MailParseException非法的邮件配置属性 MailPreparationException邮件模板渲染出错时会抛出此类异常。 MailAuthenticationException认证失败异常。 application.yml配置 要使用JavaMailSender实现邮件发送那么就需要先对其进行配置。通过上述内容的初步了解基本上可以确定我们要配置的参数就和JavaMailSenderImpl实现子类相关了其成员属性如下和SpringBoot官网配置文档给出的配置参数也是一一对应的。 JavaMailSenderImpl实现子类 springBoot官网配置文档 我所做的配置如下 spring:mail:protocol: smtphost: smtp.qq.comdefault-encoding: UTF-8username: email-accountpassword: key/passwordproperties:mail:debug: true #开启日志打印smtp:auth: truestarttls:enable: truerequired: true 邮件发送 上面了解到两种邮件形式所以接下来我们尝试一下如何发送简单文本邮件以及自定义模板的邮件。 SimpleMailMessage发送 简单邮件的发送示例代码如下其中JavaMailSender 实例即为文章开头部分提到的由Spring框架自动注入的Bean实例。 Component public class EmailSendServiceImpl implements EmailSenderService {Autowiredprivate JavaMailSender mailSender;Overridepublic R sendSimpleEmail(String from, String to, String subject, String text) {try {//创建邮件对象SimpleMailMessage mailMessage new SimpleMailMessage();//设置邮件属性mailMessage.setFrom(from);//发件人mailMessage.setTo(to);//收件人mailMessage.setSubject(subject);//主题mailMessage.setText(text);//文本内容mailMessage.setSentDate(new Date());//发送日期//发送邮件this.mailSender.send(mailMessage);//返回消息return R.ok(邮件发送成功!);} catch (MailException e) {e.printStackTrace();return R.fail(邮件发送失败!);}} }MimeMailMessage发送 为了方便向邮件中写入自定义内容所以自定义邮件模板需要借助后端的模板引擎来实现此处我们选择thymeleaf模板引擎。以下为此时的依赖 !-- spring-boot-starter-mail--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-mail/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependency thymeleaf配置 如上图所示thymeleaf模板引擎内置了一套配置规则最简单的方式就是将其原模原样的写到application.yml配置文件中即可。 以下为我的配置项 spring:thymeleaf:prefix: classpath:/templates/suffix: .htmlmode: HTML 邮件模板定制 邮件模板定制其实就是写一个前端页面然后借助thymeleaf模板引擎的表达式语法实现自定义内容的动态填充即可。 关于Thymeleaf的表达式语法详情可参阅官网文档Tutorial: Using Thymeleaf 但是说实话对于简单的文本替换以下的简单表达式语法基本就能满足了。 关于邮件模板的定制如果要求特别高的话可以自己从零开始写但是如果要快速实现的话也可以借助在线生成工具这里比较推荐拉易网提供的精美邮件定制服务里面内置了一些可以直接使用的邮件模板也可以在此基础上进行个性化定制零代码自动生成。 最终将定制好的模板下载下来即可。 如何使用邮件模板 那么我们下载下来的邮件模板如何使用呢 其实和我们的Thymeleaf模板引擎配置相关毕竟是要将这个模板交给Thymeleaf模板引擎进行值的动态替换和渲染的。 这里对应于thymeleaf的prefix配置项我的email.html邮件模板就放在templates路径下。 另外为了实现动态替换文本例如我这里想要实现邮件验证码那么我就要通过表达式语法提供一个文本字符串的变量verifyCode以便于在后面发送邮件时将这个变量替换为任何我们随机生成的验证码字符串。 示例代码 终于来到代码环节了但是前面的环节也确实缺一不可。 Component public class EmailSendServiceImpl implements EmailSenderService {Autowiredprivate JavaMailSender mailSender;Autowiredprivate TemplateEngine templateEngine;Overridepublic R sendMimeEmail(String from, String to, String subject) {//create a new JavaMail MimeMessageMimeMessage mimeMailMessage this.mailSender.createMimeMessage();MimeMessageHelper mimeMessageHelper null;try {/*** mimeMessage – the mime message to work on* multipart – whether to create a multipart message that supports alternative texts, inline elements and attachments (corresponds to MULTIPART_MODE_MIXED_RELATED)*/mimeMessageHelper new MimeMessageHelper(mimeMailMessage, true);//setting basic paramsmimeMessageHelper.setFrom(from);mimeMessageHelper.setTo(to);mimeMessageHelper.setSubject(subject);//create html-text based on thymeleaf templateContext context new Context();context.setVariable(verifyCode,456935);String process templateEngine.process(email, context);//设置邮件内容/*** process:the text for the message* html:whether to apply content type text/html for an HTML mail, using default content type (text/plain) else*/mimeMessageHelper.setText(process,true);//发送邮件this.mailSender.send(mimeMailMessage);return R.ok(邮件发送成功!);} catch (MessagingException e) {e.printStackTrace();return R.fail(邮件发送失败!);}} }* 模板变量替换:Context探究 先看一下源码注释 IContext接口的非web(场景)实现适用于非web场景。 我们继续查看Context父类AbstractContext实现的IContext接口可以看到有一个我们刚才用于动态替换thymeleaf模板变量的方法 注意到它还提供了一个重载方法可以实现多个模板变量值的设置都是以key-value键值对的形式出现。
http://www.huolong8.cn/news/403861/

相关文章:

  • 山东省建设厅网站首页做冷库的网站
  • 淘宝建设网站的目的是什么有趣的网站网址
  • 如果做游戏的技术用来做网站网站建设所需
  • 网站建设与网站主机的选择带产品多用户商城
  • 十大网站app软件下载网站开发文档有哪些
  • 猪八戒网怎么做网站网站设计教学
  • 做建材的网站有哪些合肥网站建设需要多少钱
  • 公司网站建设费有没有学做蛋糕的网站和视频
  • asp网站加速常州迅捷网络
  • 营销型企业网站建设的步骤招远市建设局网站
  • 申请网站建设的请示metro 导航网站
  • 广州住房公积金建设银行预约网站首页紧急访问升级狼人通知
  • 58黄页网推广公司响应式网站 乐云seo品牌
  • 如何快速建立一个网站网站分页需要前端做还是后端
  • 做空的网站有哪些公司做网站属于什么费用
  • 长沙网站开发培训logo设计在线生成免费免费设计logo生成器
  • 品牌商城网站开发创新的赣州网站建设
  • 怎样做免费企业网站wordpress互联网访问
  • 网站建设实习收获网站模板安装好后
  • 创业型企业网站模板河间哪里有做网站的
  • 外国网站接单做翻译顺义企业网站建站公司
  • 房地产营销门户网站开发网站建设500错误代码
  • pageadmin做的网站的域名必须要备案吗找工作的平台
  • 推广型网站建设黄骅市做网站价格
  • 网站开发专业简历安卓移动开发
  • 网站后台编辑器不能正常显示电脑浏览器打不开网页是什么原因
  • 江苏网站建设系统服务学生个人网页设计作品
  • 建网站素材成都网站建设优化前十
  • 网站建设后期需要后期做的个人备案 做网站
  • 做贵网站多少钱wordpress 文件不刷新