javamail实现简单邮件发送
来源:互联网 发布:mysql压缩包下载地址 编辑:程序博客网 时间:2024/06/06 18:29
本文通过JavaMail 实现简单的文本邮件传输,常用的电子邮件传输协议包括SMTP,POP3,IMAP等。其中创建和发送邮件只需要用到SMTP(Simple Mail Transfer Protocol)协议,即简单邮件传输协议。JavaMail 是Java官方提供的的对电子邮件进行操作的类库,但是没有包括到标准的JDK中,因此需要自己去官网上下载,下载地址:https://java.net/projects/javamail/pages/Home 下载javax,.mail.jar包并添加到项目的 build path中。
接下来开始简单讲一下创建邮件发送的步骤,主要可分为两大部分 :1.创建一封简单文本邮件;2.发送邮件到邮箱;话不多说下面直接上代码,亲测可用!
一、创建一封简单文本邮件
public MimeMessage createMimeMessage(Session session,String sendMail,String[] receiveMail,String subject,String msgContent) throws Exception{ //创建一份简单文本邮件MimeMessage message = new MimeMessage(session);//message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));message.setFrom(new InternetAddress(sendMail, MimeUtility.encodeText( "某宝网" ,"UTF-8","b")));Address[] addr = new Address[receiveMail.length];for(int i =0;i<receiveMail.length;i++){addr[i] = new InternetAddress(receiveMail[i],"尊敬的用户","UTF-8");}message.addRecipients(MimeMessage.RecipientType.TO, addr);message.setSubject(subject,"UTF-8");message.setContent(msgContent, "text/html;charset=UTF-8"); message.setSentDate(new Date());message.saveChanges(); return message;}
二、发送邮件(这边测试了QQ邮箱和163邮箱,大同小异)
①163邮箱:如果要使用163邮箱发送邮件,首先必须先登录到自己的163邮箱,进入设置---》开启SMTP/POP3服务,进行短信验证后可以进行授权码的设置。授权码:第三方客户端登录时需要用到,在这边用javamail发送邮件,密码填写的是授权码,而不是登录密码。
②QQ邮箱:使用QQ邮箱也需要开启SMTP/POP3服务,并短信验证获取授权码,这边QQ邮箱的授权码是自动发放而不是自己填写的,可以多次获取。
两者的不同在于:javamail实现邮箱发送的过程中,QQ邮箱为提高安全性需要使用SSL 安全认证,而163邮箱可以不使用。非SSL连接的SMTP端口一般为25,可以不进行设置(默认)。如果使用了SSL连接,则应该改为对应邮箱的SMTP服务器的端口,如QQ邮箱为端口:465 。这边端口必须设置,否则会出错。
发送邮件代码实现主要分为几步:1.参数配置(用于连接邮件服务器) 2.创建会话对象session,用于和服务器交互 3.获取上文中创建的邮件 4.根据session获取邮件传输对象 5.发送邮件 6.关闭传输对象。直接上代码:
@RequestMapping(value="/sendMsg.do",produces="text/xml;charset=UTF-8")@ResponseBodypublic String sendMessage(HttpServletRequest request){String[] eamilUrl = request.getParameter("email").split(";");String sendSubject = request.getParameter("subject");String sendContent = request.getParameter("message");Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true"); // 需要请求认证/* //QQ邮箱需要设置SMTP端口465,和SSL安全链接final String smtpPort = "465"; props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.socketFactory.port", smtpPort);*/ Session session = Session.getDefaultInstance(props);// 根据配置创建会话对象, 用于和邮件服务器交互session.setDebug(true);try {MimeMessage message = createMimeMessage(session, myEmailAccount, eamilUrl,sendSubject,sendContent);Transport transport = session.getTransport(); //获取邮件传输对象transport.connect(myEmailAccount, myEmailPassword);transport.sendMessage(message, message.getAllRecipients());transport.close();return "success";} catch (Exception e) {e.printStackTrace();return "fail";}}
前端代码:简单的ajax请求
<div>主题:<input type="text" name="subject" id="subject"/>发送给:<input type="text" name="emailAddr" id="emailAddr"/>邮件内容:<textarea name="msgContent" id="msgContent"></textarea><button id="sendMsg" onclick="sendMessage()">发送邮件</button></div><script type="text/javascript">function sendMessage(){$.ajax({type:"post",url:"testUser/sendMsg.do",data:{"email":$("#emailAddr").val(),"subject":$("#subject").val(),"message":$("#msgContent").val()},dataType:"text",success:function(data){if(data=="success"){alert("发送成功!");}else{alert("发送失败,请重新发送!");}}});}</script>
如果控制台报错,请根据错误信息,参考查阅:http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html 解决。
这样简单的邮件发送功能就实现了,接下来还会继续探讨如何实现邮件的复杂传输包括图片、附件的传输........
- JavaMail发送邮件简单实现
- javamail实现简单邮件发送
- JAVAmail简单实现发送邮件
- 基于javamail简单实现邮件发送
- JavaMail实现简单的邮件发送功能
- JavaMail发送简单邮件
- JavaMail 发送简单邮件
- JavaMail 简单发送邮件
- javaMail简单发送邮件
- JavaMail 实现邮件发送
- javamail实现邮件发送
- Javamail实现邮件发送
- JavaMail实现邮件发送
- javaMail实现邮件发送
- javamail实现发送邮件
- Javamail实现邮件发送
- javaMail实现发送邮件
- JAVAMAIL实现发送邮件
- qt中文乱码解释
- python学习笔记-3.1python运算符和if判断
- java学习笔记3——操作运算符
- (六)简单排序-选择排序
- Appdelegate跳转到指定tabbaritem
- javamail实现简单邮件发送
- datatables+json+ajax以json输出和删除
- Android listview实现分组
- 小学生图解排序算法:④希尔排序
- CentOS 7上安装nsq,并配置系统服务、开机启动
- Linux软连接与硬链接
- mybatis常用的全局配置
- 天平称球的问题
- [网络流24题]圆桌聚餐