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  解决。


这样简单的邮件发送功能就实现了,接下来还会继续探讨如何实现邮件的复杂传输包括图片、附件的传输........


0 0
原创粉丝点击