现在很多邮件服务器都需要进行验证,本文使用javamail1.4使用需要验证的smtp 发送邮件,作者使用smtp.126.com测试成功,但使用smtp.tom.com提示发送成功,但总接受不到,可能根对方smtp有关系
验证类:
package com.test.auth; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class Authentic extends Authenticator ... { protected PasswordAuthentication getPasswordAuthentication() ...{ String username = "1111"; //大多数是你邮件@前面的部分 String pwd = "22222"; return new PasswordAuthentication(username, pwd); }}
发送页面:其中from中的邮箱地址要和验证类中设置的用户名、密码统一起来
<% ... @ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030" %> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http-equiv ="Content-Type" content ="text/html; charset=GB18030" > < title > Insert title here </ title > </ head > < body > < form name ="sendmail" action ="javamail.jsp" method ="post" > 发信人: < input type ="text" name ="from" />< br > 收件人: < input type ="text" name ="recieve" />< br > 主题: < input type ="text" name ="subject" />< br > 内容: < textarea name ="content" cols =40 rows =5 ></ textarea >< br > < input type ="submit" value ="发送" > </ form > </ body > </ html >发送代码(JSP实现):
<% ... @ page import="javax.mail.*" %> <% ... @ page import="javax.mail.internet.*" %> <% ... @ page import="javax.activation.*" %> <% ... @ page import="java.util.*,java.io.*" %> <% ... @ page import="com.test.auth.*" %> <% ... @ page contentType="text/html;charset=GB2312" %> < html > < head > < title > CH17 - JavaMail.jsp </ title > </ head > < body > < h2 > 利用JavaMail来传送电子邮件 </ h2 > <% ... InternetAddress[] address = null; request.setCharacterEncoding("GB2312"); String mailserver = "202.108.5.142"; //最好写IP String From = request.getParameter("from"); String to = request.getParameter("recieve"); String Subject = request.getParameter("subject"); String messageText = request.getParameter("content"); boolean sessionDebug = false; try { // 设定所要用的Mail 服务器和所使用的传输协议 java.util.Properties props = System.getProperties(); props.put("mail.host",mailserver); props.put("mail.transport.protocol","smtp"); props.put("mail.smtp.auth", "true"); // 产生新的Session 服务 Authentic auth = new Authentic(); Session mailSession = Session.getDefaultInstance(props, auth); mailSession.setDebug(sessionDebug); Message msg = new MimeMessage(mailSession); // 设定传送邮件的发信人 msg.setFrom(new InternetAddress(From)); // 设定传送邮件至收信人的信箱 address = InternetAddress.parse(to,false); msg.setRecipients(Message.RecipientType.TO, address); // 设定信中的主题 msg.setSubject(Subject); // 设定送信的时间 msg.setSentDate(new Date()); // 设定传送信的MIME Type msg.setText(messageText); // 送信 Transport.send(msg); out.println("邮件已顺利传送"); } catch (MessagingException mex) { mex.printStackTrace(); } %> </ body > </ html > 如需要发送html格式邮件,只需修改 Multipart mp=new MimeMultipart(); MimeBodyPart mbp=new MimeBodyPart(); mbp.setContent(messageText,"text/html;charset=gb2312"); mp.addBodyPart(mbp); msg.setContent(mp);