如何用javamail定时发送邮件
- 格式:doc
- 大小:239.00 KB
- 文档页数:54
1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。
而邮件体中就包括了邮件的正文和附件等内容信息。
下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
Java发送邮件——SpringBoot集成JavaMail ⽤途:此⽂仅供,⾃⼰今后的⼩程序通过邮件,批量通知⽤户。
简单记录了⼀些发送基本邮件的操作。
项⽬(SpringBoot版本为2.1.2.RELEASE):核⼼依赖(其他相关依赖,在其使⽤的地⽅具体说明):<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>application.yml——邮件发送相关配置:spring:mail:host: username: ***@password: *** #qq邮箱开启POP3/SMTP服务后,⽣成的授权码receiver: ***@protocol: smtpdefault-encoding: utf-8邮件实体类(使⽤Lombok的注解简化实体构造):import lombok.Data;import org.springframework.core.io.FileSystemResource;@Datapublic class MailBean {private String subject;private String text;private FileSystemResource file;private String attachmentFilename;private String contentId;}简单封装邮件发送的⼯具类:import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import ponent;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;@Componentpublic class MailUtil {private final JavaMailSender mailSender;@Value("${ername}")private String sender;@Value("${spring.mail.receiver}")private String receiver;@Autowiredpublic MailUtil(JavaMailSender mailSender) {this.mailSender = mailSender;}public void sendMailSimple() {SimpleMailMessage mimeMessage = new SimpleMailMessage();mimeMessage.setFrom(sender);mimeMessage.setTo(receiver);mimeMessage.setSubject("主题");mimeMessage.setText("正⽂");mailSender.send(mimeMessage);}private void sendMail(MailBean mailBean, boolean html, boolean multipart) {MimeMessage mimeMessage = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, multipart); helper.setFrom(sender);helper.setTo(receiver);helper.setSubject(mailBean.getSubject());helper.setText(mailBean.getText(), html);if (mailBean.getFile() != null) {helper.addAttachment(mailBean.getAttachmentFilename(), mailBean.getFile()); }} catch (MessagingException e) {e.printStackTrace();}mailSender.send(mimeMessage);}public void sendMail(MailBean mailBean) {sendMail(mailBean, true, true);}public void sendMailText(MailBean mailBean) {sendMail(mailBean, false, false);}public void sendMailHtml(MailBean mailBean) {sendMail(mailBean, true, false);}public void sendMailInline(MailBean mailBean) {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);try {helper.setFrom(sender);helper.setTo(receiver);helper.setSubject(mailBean.getSubject());helper.setText(mailBean.getText(), true);helper.addInline(mailBean.getContentId(), mailBean.getFile());} catch (MessagingException e) {e.printStackTrace();}mailSender.send(mimeMessage);}}单元测试就不写了,忘记怎么写了。
JavaWeb(⼗三)使⽤javamail进⾏发送邮件,(使⽤QQ,163,新浪邮箱服务器) 加油加油。
--WZY⼀、发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协议,默认端⼝,25 POP3:Post Office Protocol 3,即邮局协议,接收邮件的协议,默认端⼝,110 知道了这两个协议,下⾯来说说邮件发送和接收的原理图,分两种,相同邮件(QQ邮箱给QQ邮箱)和不同邮件(QQ邮箱给163邮箱)是不⼀样的。
解释: 为了⽅便起见,将新浪邮箱,list@称为⽤户A,将搜狐邮箱,wangwu@ 称为⽤户B ⽤户A(新浪邮箱,list@)给⽤户B(搜狐邮箱,wangwu@)发送⼀封邮件,那么整个过程就为图中的实线部分,⽤户A通过OutLook(浏览器或者客户端)登录⾃⼰的邮箱帐号,编写邮件,使⽤Smtp协议发送给Sina的邮件服务器中的Smtp服务器(专门⽤来发送的服务器),然后在通过SMTP协议,传输给Sohu的邮件服务器中的Smtp服务器,然后通过Sohu的Smtp服务器将邮件发送给⽤户B的存储设备进⾏存储(每个⽤户都会有⼀个存储空间⽤来存储邮件的),到这⾥,⽤户A就相当于发送成功了,因为已经到达了⽬的地,如果B⽤户需要查看邮件内容,必须通过POP3服务器将从⾃⼰的存储设备中拿到,然后返回到浏览器或者客户端中显⽰。
⽤户B给⽤户A发送⼀封邮件,那么整个过程就为图中的虚线部分,是和A给B发⼀样的步骤 ⽤户A给⼀个同样使⽤新浪邮箱的⽤户C发送⼀封邮件,那么其过程就简单的多了,先通过Smtp服务器,然后smtp服务器会将其发送到⽤户C的存储设备上,A发送邮件就成功了,⽤户C要显⽰⾃⼰邮箱中的邮件,那么就通过POP3服务器从⾃⼰存储设备中拿取所有邮件进⾏查看。
⼆、通过Java代码实现发送邮件 2.1、准备jar包 核⼼:mail.jar 依赖:activation.jar,邮件需要发送附件时使⽤ 2.2、使⽤163邮箱发送邮件 2.2.1、⾸先在163邮箱中注册⼀个帐号。
使⽤java发送短信和邮件(1)发送短信1.1在中国⽹建SMS上注册⼀个⽤户名,并获取短信密钥(⾮登录密码)1.2代码import java.io.IOException;import mons.httpclient.Header;import mons.httpclient.HttpClient;import mons.httpclient.HttpException;import ValuePair;import mons.httpclient.methods.PostMethod;public class SendMessage {/*** @param args* @throws IOException* @throws HttpException*/public static void main(String[] args) throws HttpException, IOException {HttpClient client=new HttpClient();PostMethod post=new PostMethod("");//在头⽂件中设置转码post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");NameValuePair[] data={new NameValuePair("Uid","⽹建注册⽤户名"),new NameValuePair("Key","短信密钥"),new NameValuePair("smsMob","接收号码"),new NameValuePair("smsText","短信内容")};post.setRequestBody(data);client.executeMethod(post);Header[] headers=post.getRequestHeaders();int statusCode=post.getStatusCode();System.out.println("statusCode:"+statusCode);for(Header h:headers){System.out.println(h.toString());}String result=new String(post.getResponseBodyAsString().getBytes("gbk"));System.out.println(result);post.releaseConnection();}1.3注意需要引⼊包:commons-logging-1.1.1.jar、commons-httpclient-3.1.jar、commons-codec-1.4.jar1.4StatusCode说明:短信发送后返回值说 明-1没有该⽤户账户-2接⼝密钥不正确不是账户登陆密码-21MD5接⼝密钥加密不正确-3短信数量不⾜-11该⽤户被禁⽤-14短信内容出现⾮法字符-4⼿机号格式不正确-41⼿机号码为空-42短信内容为空-51短信签名格式不正确接⼝签名格式为:【签名内容】-6IP限制⼤于0短信发送数量2、发邮件2.1smtp验证类import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class SmtpAuthenticator extends Authenticator {String username=null;String password=null;public SmtpAuthenticator(String name,String password) {super();ername=name;this.password=password;}public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(ername, this.password);}}2.2发邮件的⼯具类import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;public class JavaMailSendUtil {public void sendMail(String subject,String from,String[] to,String test,String[] filenames,String mineType){try {Properties props=new Properties();String smtp="";//设置发送邮件所⽤到的smtpString servername="188********@";String serverpassword="************";Session mailSession=null;MimeMessage mimeMsg=null;props=ng.System.getProperties();props.put("mail.smtp.host", smtp);//设置SMTP主机props.put("mail.smtp.auth", "true");//是否到服务器⽤户名和密码验证//到服务器验证发送的⽤户名和密码是否正确SmtpAuthenticator myEmailAuther=new SmtpAuthenticator(servername, serverpassword);//设置邮件会话注意这⾥讲认证信息放进了Session的创建参数⾥mailSession=javax.mail.Session.getInstance(props,(Authenticator)myEmailAuther);//设置传输协议javax.mail.Transport transport=mailSession.getTransport("smtp");//设置from、to等信息mimeMsg=new javax.mail.internet.MimeMessage(mailSession);if(from!=null&&!from.equals("")){InternetAddress sendFrom=new InternetAddress(from);mimeMsg.setFrom(sendFrom);//设置发送⼈地址}InternetAddress[] sendTo=new InternetAddress[to.length];for(int i=0;i<to.length;i++){System.out.println("发送到:"+to[i]);sendTo[i]=new InternetAddress(to[i]);}mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo); mimeMsg.setSubject(subject,"gb2312");MimeBodyPart messageBodyPart1=new MimeBodyPart();messageBodyPart1.setContent(test,mineType);//附件传输格式Multipart multipart=new MimeMultipart();multipart.addBodyPart(messageBodyPart1);for(int i=0;i<filenames.length;i++){MimeBodyPart messageBodyPart2=new MimeBodyPart();String filename=filenames[i].split(";")[0];System.out.println(filename);String displatname=filenames[i].split(";")[1];//得到数据源FileDataSource fds=new FileDataSource(filename);//BodyPart添加附件本⾝messageBodyPart2.setDataHandler(new DataHandler(fds));//BodyPart添加附件⽂件名messageBodyPart2.setFileName(MimeUtility.encodeText(displatname));multipart.addBodyPart(messageBodyPart2);}mimeMsg.setContent(multipart);//设置信件头的发送⽇期mimeMsg.setSentDate(new Date());mimeMsg.saveChanges();//发送邮件Transport.send(mimeMsg);transport.close();System.out.println("消息发送成功");} catch (Exception e) {// TODO: handle exception}}}2.3测试类public class TestMailSend {/*** @param args*/public static void main(String[] args) {String title="测试邮件";String from="188********@";String sendTo[]={"1245226995@","jlsong186@"};String content="just test java send mail<br><a href=\"\">My blog</a>"; String fileNames[]={"F:\\068.JPG;068.JPG"};JavaMailSendUtil test=new JavaMailSendUtil();try {test.sendMail(title, from, sendTo, content, fileNames, "text/html;charset=gb2312");} catch (Exception e) {e.printStackTrace();}}}。
电子邮件技术中的自动转发和定时发送操作指南一、自动转发原理与用途解析在日常工作和生活中,我们经常遇到需要及时转发重要邮件的情况。
为了提高工作效率,电子邮件技术中的自动转发功能成为了必不可少的工具。
自动转发的原理其实很简单,就是在收到指定邮件后,系统会自动将该邮件转发到指定的邮箱。
它的用途也十分广泛,有助于人们实时了解业务进展、提高工作效率以及及时解决问题。
二、自动转发设置步骤1:选择合适的电子邮件客户端软件想要使用自动转发功能,首先需要选择合适的电子邮件客户端软件。
市面上常见的包括Microsoft Outlook、Foxmail以及Thunderbird等。
不同的软件在自动转发功能的设置上可能会有些差异,但一般都提供了此功能。
三、自动转发设置步骤2:打开电子邮件客户端软件设置无论是哪种电子邮件客户端软件,都有一个设置选项。
点击该选项后,会弹出一个设置页面。
具体位置可能因软件而异,但通常位于“工具”或“选项”菜单下。
四、自动转发设置步骤3:选择转发规则在设置页面中,找到“转发规则”或类似的选项。
点击进入后,可以进行具体的规则设置。
根据自己的需求,可以选择转发特定的邮件、特定的发件人,甚至可以设置转发的时间段。
五、自动转发设置步骤4:填写转发目标邮箱在设置规则后,需要填写转发的目标邮箱。
这是将邮件转发到指定邮箱的关键步骤。
一般来说,只需要在相应的输入框中填写邮箱地址即可,不同软件可能会有一些额外设置,如是否保存转发的邮件等。
六、定时发送邮件的操作指南在日常工作中,有时候我们希望能够在特定的时间点发送邮件。
这时候,定时发送功能就派上用场了。
它可以帮助我们预先设定好发送时间,到点自动发送邮件,无需人工干预。
七、定时发送设置步骤1:选择合适的电子邮件客户端软件定时发送邮件功能通常并不是所有的电子邮件客户端软件都自带的。
因此,在选择软件时,最好先确认该软件是否支持定时发送邮件功能。
常见的软件如Microsoft Outlook、Foxmail、Thunderbird等多数都支持该功能。
基于Javamail的邮件收发系统使用说明书基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。
它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。
开发环境:JDK1.6 + Windows平台开发技术:Javamail开发工具:Eclipse3.4运行环境:PC上需安装JDK1.6,且正确配置环境变量。
系统基本功能如下:(1) 收取并显示POP3邮件服务器上指定邮箱的邮件;(2) 使用SMTP邮件服务器发送邮件;(3) 邮件附件的发送与接受;(4) 删除邮件;具体操作步骤如下:1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开Javamail邮件收发系统客户端软件。
进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件账号及密码信息进行设置。
图1-1邮件客户端主界面设置举例如下:POP3属性POP3服务器:(或或)Email地址:shinning191@(ceshi2009ok@、qiufeng006@)账户名:shinning191(ceshi2009ok、qiufeng006)密码:6857191(123456、28912786)SMTP属性SMTP服务器:(或或)Email地址:shinning191@(ceshi2009ok@\qiufeng006@)账户名:shinning191(ceshi2009ok、qiufeng006)密码:6857191(123456、28912786)在对SMTP/POP3进行设置的时候,由于系统的缺陷,需要先对POP3进行属性设置,然后确定关闭该对话框;重新打开属性设置对话框,对SMTP进行属性设置,确定。
这样便可以正确设置完邮件服务器的属性。
此系统对上述设置的信息具有存储功能,在这里,我们采用属性文件的形式存储SMT P 和POP3邮件服务器属性设置。
电子邮件技术中的邮件定时发送和延迟发送设置随着电子邮件的普及,人们越来越多地依赖于邮件来传递信息和沟通。
在邮件的使用中,定时发送和延迟发送功能成为了许多人关注的焦点。
这两种功能为我们提供了更灵活的邮件管理方式,并在不同的场景中展现出了其独特的魅力。
一、定时发送:精确掌控发送时间定时发送功能的出现,可以让我们在邮件编写好之后,选择一个合适的时间点进行发送,而不是立即发送。
这样一来,我们就能够更好地掌控邮件发送的时机,从而避免在某些情况下造成不必要的尴尬或困扰。
举个例子,假设我们有一封重要的邮件需要在周一早上9点准时发送给客户,以确保及时联系和商谈合作事项。
但由于各种原因,我们可能无法在该时间点亲自操作发送,这时候定时发送功能就能够派上用场。
我们可以事先编写好邮件,在邮件客户端中设定好发送时间,然后放心地等待周一来临。
这样,无论我们是否在电脑前,邮件会按照预定时间自动发送,确保即时送达对方邮箱。
这种功能对于邮件工作的准确性和效率提升有着明显的帮助。
二、延迟发送:充分考虑接收方延迟发送功能则可让我们在编写邮件后选择一个适当的时间段,从而避免不便或不合时机地打扰对方。
尤其是在跨时区或是特殊时段发送邮件时,这种功能变得尤为重要。
例如,当我们需要在晚上工作时段发送邮件,但担心会干扰到收件人的休息时间时,我们可以将邮件设定为在第二天早上的工作时间开头才发送。
这样一来,我们既能保证邮件尽早送达,又不会在对方休息或不方便时造成打扰。
这种延迟发送的灵活性使得我们可以更加周到地考虑到对方的时间和需求,从而有效提升邮件的沟通质量。
三、定时发送与延迟发送的应用场景除了个人使用外,定时发送和延迟发送的功能在商务沟通中也有着广泛的应用场景。
1. 关键时刻的重要邮件:如合作伙伴的合同签署、项目交付等重要邮件,在一定的安排规划下,通过定时发送功能保证邮件在关键时刻准时送达,提高工作效率和准确性。
2. 跨时区工作邮件:在跨时区的合作过程中,通过延迟发送功能将邮件设定在对方工作时间,避免在对方休息或夜间时段打扰到对方,维护良好的工作关系。
邮件定时发送和延迟发送设置是电子邮件技术中的两个重要功能,它们为我们的工作和生活提供了更多的灵活性和方便性。
通过合理利用这些功能,我们可以更好地管理日常邮件,提高工作效率,同时也能避免一些尴尬和疏忽。
一、定时发送邮件在我们忙碌的工作中,有时候会有一些特定的场景,需要我们在特定的时间点发送邮件。
而不是在那个时候将邮件写好并发送出去,我们可以设置定时发送的功能来完成这个任务。
定时发送邮件可以使我们更为智能地安排时间,并避免错过发送的时机。
在使用邮件服务商提供的电子邮件客户端或邮件管理工具时,常常可以找到定时发送的设置选项。
我们可以根据自己的需求选择发送的时间和日期。
例如,在写了一封关键邮件后,我们可以选择定时在第二天早上的九点发送,这样可以保证邮件在对方上班时间收到,并且展示了我们的工作认真和责任心。
定时发送邮件功能的使用非常简便,只需要在写邮件时将发送时间设置好即可。
这为我们的邮件发送带来了更大的灵活性和自主性。
无论是在工作上还是在生活中,我们都能够更好地掌握时间,提高工作效率。
二、延迟发送邮件邮件的延迟发送设置是另一个十分实用的功能。
有时候,我们需要给自己一些时间来仔细检查邮件的内容或者对邮件做进一步的修改。
通过设置延迟发送邮件,我们可以在邮件准备好之后,预留一段时间来检查和修改邮件内容,然后再将其发送出去。
延迟发送邮件可以帮助我们避免一些不必要的错误或疏忽。
在邮件准备好后,我们可以设置延迟发送一小时,这段时间内我们可以对邮件内容进行反复审核,确保邮件的准确性和完整性。
此外,延迟发送邮件功能也适用于不同的时区和对方工作时间不同的情况。
我们可以根据对方上班时间设置合适的延迟发送时间,这样可以尊重对方的工作习惯,并确保邮件在对方上班时间内收到。
三、总结邮件定时发送和延迟发送设置是电子邮件技术中非常实用的功能,它们提供了更多的自由度和便利性。
通过合理利用这些功能,我们可以更好地管理和安排邮件发送,提高工作效率和准确性。
Java基于JavaMail实现向QQ邮箱发送邮件最近项⽬在做新闻爬⾍,想实现这个功能:爬⾍某个页⾯失败后,把这个页⾯的 url 发到邮箱。
最终实现的效果图如下,后期可以加上过滤标签、失败状态码等,⽅便分类搜索异常。
开发⼈员可以根据邮件⾥的 url 和堆栈信息,分析爬⾍失败的原因。
是不是服务器 down 了?还是爬⾍的 Dom 解析没有解析到内容?还是正则表达式对于这个页⾯不适⽤?开启SMTP服务在 QQ 邮箱⾥的设置->账户⾥开启 SMTP 服务注意开启完之后,QQ 邮箱会⽣成⼀个授权码,在代码⾥连接邮箱使⽤这个授权码⽽不是原始的邮箱密码,这样可以避免使⽤明⽂密码。
⽹上查了⼀下例⼦,根据这篇⽂章 Java Mail(⼆):JavaMail介绍及发送⼀封简单邮件的⽰例代码。
Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要⾝份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");Session session = Session.getInstance(props);//邮件内容部分Message msg = new MimeMessage(session);msg.setSubject("seenews 错误");StringBuilder builder = new StringBuilder();builder.append("url = " + "/never_cxb/article/details/50524571");builder.append("页⾯爬⾍错误");builder.append("\n data " + TimeTool.getCurrentTime());msg.setText(builder.toString());//邮件发送者msg.setFrom(new InternetAddress("**发送⼈的邮箱地址**"));//发送邮件Transport transport = session.getTransport();transport.connect("", "**发送⼈的邮箱地址**", "**你的邮箱密码或者授权码**");transport.sendMessage(msg, new Address[] { new InternetAddress("**接收⼈的邮箱地址**") });transport.close();但是报错了DEBUG SMTP: AUTH LOGIN command trace suppressedDEBUG SMTP: AUTH LOGIN failedException in thread "main" javax.mail.AuthenticationFailedException: 530Error: A secure connection is requiered(such as ssl). More information at /cgi-bin/help?id=28因为⽰例代码是⽤的163邮箱,⽽笔者是 QQ 邮箱,看 Log 分析是 QQ 邮箱需要 SSL 加密。
SpringBoot中利⽤JavaMailSender发送邮件的⽅法⽰例(附源码)快速⼊门在Spring Boot的⼯程中的pom.xml中引⼊spring-boot-starter-mail依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>如其他⾃动化配置模块⼀样,在完成了依赖引⼊之后,只需要在application.properties中配置相应的属性内容。
下⾯我们以QQ邮箱为例,在application.properties中加⼊如下配置(注意替换⾃⼰的⽤户名和密码):spring.mail.host=ername=⽤户名spring.mail.password=密码spring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=true通过单元测试来实现⼀封简单邮件的发送:@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = Application.class)public class ApplicationTests {@Autowiredprivate JavaMailSender mailSender;@Testpublic void sendSimpleMail() throws Exception {SimpleMailMessage message = new SimpleMailMessage();message.setFrom("dyc87112@");message.setTo("dyc87112@");message.setSubject("主题:简单邮件");message.setText("测试邮件内容");mailSender.send(message);}}到这⾥,⼀个简单的邮件发送就完成了,运⾏⼀下该单元测试,看看效果如何?“由于Spring Boot的starter模块提供了⾃动化配置,所以在引⼊了spring-boot-starter-mail依赖之后,会根据配置⽂件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使⽤的地⽅直接@Autowired来引⼊邮件发送对象。
如何用javamail定时发送邮件例如:我想在3天后的中午12:00发送给别人邮件还有就是每天的中午12点给别人发送邮件,而且这些个邮件地址是从一个jsp传来的例如今天给a@发,当执行过jsp后,jsp输入的是b@,以后就给b@发而且jsp传过来的邮件地址数目是多个的,每天需要给多人在固定一时间内发邮件定时触发器有许多开源项目Timer + 多线程我在这里使用的Java计时器框架是由Java开发人员Tom White构建的一个简单通用的计划框架,以用于执行任意复杂的计划任务,他使我们实现灵活的计划策略成为可能。
Java计时器框架的本身在这里不作过多的介绍,详细信息在IBM developerWorks中国网站。
我们主要讨论如何利用Java计时器框架在Solaris平台来实现邮件的定时发送、JavaMail发送邮件的实现以及在Solaris平台上如何以后台方式运行整个邮件定时发送的应用。
下载本文的源代码,参考具体实现。
1.1 形成schedule.jar包schedule.jar包中的目录结构如下:我们将数据库的连接、日志、邮件和计划框架的通用类形成一个与具体应用要求无关的schedule.jar包。
利用javac将编译生成的目标class文件存在当前目录的classes文件夹下,然后通过jar -cvf schedule.jar ./*命令生成schedule.jar包。
1.1.1 Oracle数据库连接的建立位于db目录下,通过thin方式建立与Oracle的数据库连接,具体的实现参见《J2EE应用中与Oracle数据库的连接》一文。
1.1.2 日志以后台方式定时运行的应用应特别注意日志的功能,因为只有通过分析详细的日志信息才能准确掌握应用的执行情况。
在logs目录下为Logs.java文件,代码如下:package com.j2ee.logs;import java.io.*;import java.util.*;import java.text.SimpleDateFormat;public class Logs{private String logType="";private String server="/schedule/logs/server.log";private String task="/schedule/implements/nohup.out";private SimpleDateFormat dateFormat =new SimpleDateFormat("【yyyy年MM月dd日 E a HH:mm:ss 】");/*** @param logType server task*/public Logs(String logType){this.logType=logType;}public void print(String msg){try{String path="";if (logType.equals("server"))path=server;if (logType.equals("task"))path=task;//BufferedWriter out= new BufferedWriter(new FileWriter(path,true)); String str=dateFormat.format(new Date());if (logType.equals("task"))out.newLine();out.write(str,0,str.length());out.write(msg,0,msg.length());out.newLine();out.close();}catch(Exception e){System.out.println("Logs.print:"+e.getMessage());}}};通过类中的构造器,可以生成两个日志文件:server.log和nohup.out。
server.log用来记录计时器框架本身定时调度的日志信息,通过它来判断定时调度服务每天是否正常运行;nohup.out用来记录在具体应用中的调试信息,例如:在应用中通过System.out.println()输出的信息将记录在nohup.out文件中。
1.1.3 邮件位于mail目录下,包括以下一些文件:1)Debug.java 发送邮件时的调试信息2)EMailContents.java 邮件的正文,为了使邮件接受者对收到的邮件有一个好的视觉效果,可以先写一个统一的HTML邮件模板,在模板中填充相应的内容。
EmailContents类完成这一功能。
效果如下:3)Mailer.java 发送邮件的主方法。
它调用MailThread类中的方法创建一个发送邮件的线程。
4)MailThread.java 发送邮件线程类。
它调用MailHelper中的方法来完成发送邮件的工作。
5)MailHelper.java 发送邮件的实现类。
在类的createAndSendMail方法中包括了发送邮件一系列必须的过程,它可以完成一些邮件的正文、附件、抄送、回执等功能。
在邮件的实现中用到了两个jar包:mail.jar 和activation.jar。
1.1.4 计划框架计划框架的详细内容可以通过本文前面提供的连接去详细了解,本文该部分的代码也出自IBM网站。
1.2 邮件定时发送的实现这部分主要用到前面schedule.jar中的类来实现与具体应用要求相适应的应用。
在implements目录下有三个类:1)ScheduleTask.java 包含一个main方法,在本例中"每天计划3点开始执行计划好的任务"。
2)ScheduleThread.java 线程类,在该类的run方法中,可以添加不同类型的计划定时执行的任务类来完成不同的定时执行的任务,在本例中调用了Mails类中的sendMail方法来定时发送邮件。
3)Mails.java 按照一定的业务逻辑规则实现邮件的发送。
1.3 邮件定时发送应用的运行包括应用的启动和停止,在Solaris上我们可以编写两个脚本:start和stop来完成该工作。
1.3.1 Start脚本Start脚本内容如下:echo '************************************************************'CLASSPATH=.:/schedule/implements/jar/schedule.jar:/schedule/implements/jar/classes12.zip:/schedule/implements/jar/mail.jar:/schedule/implements/jar/activation.jarexport CLASSPATHecho 'set schedule running environment success.'nohup java com.j2ee.implement.ScheduleTask &echo 'start schedule task success.'echo 'view logs:'echo ' /schedule/implements/nohup.out'echo ' /schedule/logs/server.log'date >> /schedule/logs/server.logecho '计划框架成功启动' >> /schedule/logs/server.logecho '************************************************************'这里有两个关键点:CLASSPATH的设置和nohup运行方式。
在CLASSPATH中必须提供用到的所有jar 包,多个jar包用":"分隔;"&"表示以后台方式运行,"nohup"使应用的运行不依赖于当前的会话,如果不以"nohup"方式的话,即" java com.j2ee.implement.ScheduleTask &",当你关闭你当前的会话时,应用将终止运行。
可以使用"ps -ef | grep java"来查看应用运行的进程号。
当然也可以通过手工交互的方式完成上述步骤来运行应用。
1.3.2 Stop脚本Stop脚本内容如下:echo '************************************************************'ps -e | grep java >> ps.outkill -9 `cut -c 2-6 ps.out`rm ps.outdate >> /schedule/logs/server.logecho '计划框架成功停止' >> /schedule/logs/server.logecho 'stop schedule task success.'echo '************************************************************'该脚本中主要通过" ps -e | grep java"命令将输出信息重定向到"ps.out"文件中,在从文件中获得进程号,然后将它kill掉。
同样也可以通过手工的方式将它kill。
一般的问题在SUN中国的技术社区都能找的到的建议你去看看.这篇是切过来的你可以去SUN中国技术社区下载具体实例若其Type为tex/plain就可直接读出,代码如下:总结Java简化了企业解决方案的开发、部署和管理等相关的复杂问题,它是面向对象的编程语言,同时也是具有平台独立性、高性能的服务器端编程语言。
它提供的标准系统框架和服务适合团体开发,可控制性好,与其它资源的集成性好。
采用Java为编程工具开发高性能、高可用性的WebMail服务器具有非常重要的意义。