Javamail是用来发送邮件的一个常用框架,我以前用过这个框架写过一个发送邮件的demo,以下内容是我以前整理的。
1javamail的使用
我是使用mavne的,所以引用了如下的依赖,如果不引入第二个依赖的话会报javamail的一个log类找不到
<dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.0</version> <classifier>javadoc</classifier> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.0</version> </dependency>
2javamail中的常用类
(1) javax.mail.Properties类
JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.
用法:
Properties props = new Properties ();
props.put("mail.smtp.host", "smtp.163.com");//可以换上你的smtp主机名。
(2) javax.mail.Session类
这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。
用法:
Session sendMailSession;
sendMailSession = Session.getInstance(props, null);
(3) javax.mail.Transport类
邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和Store. Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。
用法:
Transport transport;
transport = sendMailSession.getTransport("smtp");
用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议,如"smtp"。这将为我们省了很多时间。因为JavaMail以境内置了很多协议的实现方法。
注意: JavaMail并不是绝对支持每一个协议,目前支持IMAP、 SMTP和 POP3.
(4) javax.mail.MimeMessage类
Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。
用法:
Message newMessage = new MimeMessage(sendMailSession);
(5) javax.mail.InternetAddress类
一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用Address确定信件地址了。和 Message 一样,Address 也是个抽象类。您用的是Javax.mail.internet.InternetAddress 类.
用法:
InternetAddress from=new InternetAddress("[email protected]");
(6) javax.mail.Store类
Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。
用法:
Store store=s.getSorte("pop3");//s为一个邮件会话
store.connect(popserver,username,password);//通过你提供的pop地址,用户名和密码登录你的邮箱
(7) javax.mail.Folder类
Folder类用于分级组织邮件,并提供照Javax.mail.Message格式访问email的能力。
用法:
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
(8) javax.mail.Internet.MimeMultpart
一般保存电子邮件内容的容器是Multipart抽象类,它定义了增加和删除及获得电子邮件不同部分内容的方法.由于Multipart是抽象类,我们必须为它使用一个具体的子类,JavaMail API提供javax.mail.Internet.MimeMultpart类来使用MimeMessage对象.
用法:
MimeMultipart multipart=new MimeMultipart();
注:我们使用MimeMultipart对象的一个方法是addBodyPart(),它在我们的电子邮件内容里添加BodyPart(BodyPart类在下面紧接着要介绍)对象.消息可以有很多部分,一个BodyPart可以代表一个部分.
(9) javax.mail.Internet.MimeBodyPart类
MimeBodyPart是BodyPart具体用于mimeMessage的一个子类.
MimeBodyPart对象代表一个MimeMessage对象内容的一部分.每个MimeBodyPart被认为有两部分:
⊙一个MIME类型
⊙匹配这个类型的内容
用法:
MimeBodyPart mdp=new MimeBodyPart();
String text="Hello JavaMail!";
mdp.setContent(text,"text/plain");//定义MIME类型为text/plain,并设置MimeBodyPart的内容.
(10) javax.activation.DataHandler类(包含在JAF中)
JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的.JavaMail API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.
用法:
DataHandler dh=new DataHandler(text,type);
mdp.setDatahandler(dh);//mdp是一个MimeBodyPart对象
(11) javax.activation.FileDataSource类(包含在JAF中)
一个FileDataSource对象可以表示本地文件和服务器可以直接访问的资源.一个本地文件可以通过创建一个新的MimeBodyPart对象附在一个mimeMessage对象上.
用法:
MimeMultipart mm=new MimeMultipart();
MimeBodyPart mdp=new MimeBodyPart();
FileDataSource fds=new FileDataSource("c:/exam.txt");
mdp.setDataHandler(new DataHandler(fds)); //设置数据源
mm.addBodyPart(mdp); //为当前消息MimeMultipart对象增加MimeBodyPart
(12) javax.activation.URLDataSource类(包含在JAF中)
远程资源,URL不会指向它们,由一个URLDataSource对象表示.一个远程资源可以通过创建一个新mimeBodyPart对象附在一个mimeMessage对象上(同FileDataSource差不多).
用法:
与FileDataSource唯一不同的是数据源的设置:
URLDataSource uds=new URLDataSource("http://www.csdn.net/logo.gif");
其中几个重要的类解释用法如下:
Session类定义了一个基本的邮件会话,所有的其他类都是由这个session才得意生效的,Session对象用java.util.Properties对象获取信息,如邮件服务器,用户名,密码及整个应用程序中共享的其他信息.类的构造器是此有的,private.它能用getDefaultInstance()方法来共享.获取Session对象的方方法如下:
Properties props = new Properties();
Session session = Session.getDefaultInstance(props,null);
Null参数都是Authenticator对象,在这里没有使用.
对于大多数情况,共享的session已经足够用了.
Message消息类,在获得了Session对象后,就可以继续创建要发送的消息.因为Message是个抽象类,您必须用一个子类,多数情况下为java.mail.internet.MimeMessage.这个能理解成MIME类型和头的电子邮件消息.正如不同的RFC中定义的,虽然在某些头部域非ASCII字符也能被编译,但是Message头只能被限制用US-ASCII字符.要创建一个Message请将Session对象传递给MimeMessage的构造器.
MimeMessage message = newMimeMessage(session);
一旦获得消息,就可以设置各个部分了.最基本的就是setContent()方法,例如/
message.setContent( “ Hello ” , ” text/plain ” );
如果知道在实用MimeMessage,而且消息是纯文本格式,就可以用setText()方法,它只需要代表实际内容的参数.(Mime类型缺省为text/plain)
用setSubject()方法设置subject(主题);
message.setSubject( “ 主题 ” );
Address地址类,和Message一样也是一个抽象类,一旦创建了Session和Message并将内容填入消息后,就可以用Address确定信件的地址了,用javax.mail.internet.
InternetAddress类.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:Address address = new InternetAddress( “ [email protected] ” );
若希望名字挨着电子邮件现实,就可以把它传递给构造器,如下:
Address address = new InternetAddress( “ [email protected] ” , ” 我心依旧 ” );
需要为消息的from域和to域创建地址对象,除非邮件服务器阻止,没有什么能阻止你发送一段看上去是任何人的消息了呵呵.一旦创建address将他们域消息连接方法有两种,如要要识别发件人的就可以用setFrom()和setReplyTo方法.然后message.setFrom(address);
需要实用多个from地址的就用addFrom()方法.例子如下:
Address[] address = ,.,. ; message.addFrom(address);
若要识别消息recipient收件人,就要实用addRecipient()方法了.例如:
message.addRecipient(type,address)
Authenticator与java.net类一样,JavaMailAPI也可以利用Authentcator通过用户名密码访问受保护的资源.对于JavaMail来说,这些资源就是邮件服务器,Authentcator类在javax.mail包中.要使用Authenticator,首先创建一个抽象的子类,并从
GetPasswordAuthentication方法中返回passwordAuthentication实例,创建完成后,您必须向session注册Authenticator,然后在需要认证的时候会通知它,其实说白了就是把配置的用户名和密码返回给调用它的程序.例如:
Properties props = new properties();
Authenticator auth = new MailAuthenticator()//接口声明,创建自己新类的实例.
Session session = Session.getDefauItInstance(props,auth);
Transport消息发送传输类,这个类用协议指定的语言发送消息,通常是SMTP,它是抽象类,它的工作方式与Session有些类似,尽调用静态方法send()方法,就OK了.例如:
Transport.send(message);
或者也可以从针对协议的会话中获取一个特定的实例,传递用户名和密码.发送消息,然后关闭连接,例如:
message.saveChanges();
transport transport = session.getTreansport( “ smtp ” );//指定的协议
transport.connect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
如果要观察传到邮件服务器上的邮件命令,请用session.setDubug(true)设置调试标志.
Store和folder用session获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如
Store store = session.getStore( “ pop3 ” );
Store.connect(host,username,password);
连接到Store之后,接下来,获得一个folder,必须打开它就可以读取里边的消息了.
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] message = folder.getMessages();
POP3唯一可用的文件夹就是INBOX,如果实用IMAP,还可以用其他的文件夹.
当读到了具体的message以后,就可以用getContent来获取内容,或者用writeTo()将内容写入流,getContent()方法只能得到消息内容,而writeTo()的输出却包含消息头.
System.out.println(((MimeMessage)message).getConntent());
一旦读取完毕邮件,要关闭store和folder的连接.
folder.colse(boolean);
store.colse();
传递给folder的close()方法的boolean参数表示是否清楚已删除的消息从而更新folder.
下面是一个网页版的javamail例子
撰写登录界面程序如下: ---------------------------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>撰写邮件</title> </head> <body> <form action="testall.jsp" method="post" name="form1"> <table width="75" border="0" align="center" cellspacing="1" bgcolor="#006600" class="black"> <tr bgcolor="#FFFFFF"> <td width="24%">收信人地址:</td> <td width="76%"> <input name="to" type="text" id="to"></td> </tr> <tr bgcolor="#FFFFFF"> <td>主题:</td> <td> <input name="title" type="text" id="title"></td> </tr> <tr> <td height="18" colspan="2" bgcolor="#FFFFFF">信件类型 <select name="emailtype" id="emailtype"> <option value="text/plain" selected>Text</option> <option value="text/html">Html</option> </select></td> </tr> <tr> <td height="53" colspan="2" bgcolor="#FFFFFF"><textarea name="content" cols="50" rows="5" id="content"></textarea></td> </tr> <tr align="center"> <td colspan="2" bgcolor="#FFFFFF">附件1(自定义): <input name="fj1" type="text" id="fj1"> (输入文本信息) </td> </tr> <tr align="center" valign="bottom"> <td colspan="2" bgcolor="#FFFFFF">附件2(本地): <input name="fj2" type="file" id="fj2" size="10"></td> </tr> <tr align="center"> <td colspan="2" bgcolor="#FFFFFF">附件3(远程): <input name="fj3" type="text" id="fj3" value="http://"> (输入URL)</td> </tr> <tr align="center"> <td colspan="2" bgcolor="#FFFFFF"> <input type="submit" name="Submit" value="发送"> <input type="reset" name="Submit2" value="重置"></td> </tr> </table> </form> </body> </html>
处理邮件的JSP程序如下: ---------------------------------------------------------------------------------------- <%@ page contentType="text/html;charset=GB2312" %> <%request.setCharacterEncoding("gb2312");%> <%@ page import="java.util.*,javax.mail.*"%> <%@ page import="javax.mail.internet.*"%> <%@ page import="javax.activation.*"%><!--要发送附件必须引入该库--> <%@ page import="java.net.*"%><!--要用到URL类--> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>发送成功</title> </head> <body> <% try{ String tto=request.getParameter("to"); String ttitle=request.getParameter("title"); String emailtype=request.getParameter("emailtype");//获取email类型 String tcontent=request.getParameter("content"); String tfj1=request.getParameter("fj1"); String tfj2=request.getParameter("fj2"); String tfj3=request.getParameter("fj3"); Properties props=new Properties(); props.put("mail.smtp.host","127.0.0.1"); props.put("mail.smtp.auth","true"); Session s=Session.getInstance(props); s.setDebug(true); MimeMessage message=new MimeMessage(s); //给消息对象设置发件人/收件人/主题/发信时间 InternetAddress from=new InternetAddress("[email protected]"); message.setFrom(from); InternetAddress to=new InternetAddress(tto); message.setRecipient(Message.RecipientType.TO,to); message.setSubject(ttitle); message.setSentDate(new Date()); Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放多个BodyPart对象 //设置信件文本内容 BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象 mdp.setContent(tcontent,emailtype+";charset=gb2312");//给BodyPart对象设置内容和格式/编码方式 mm.addBodyPart(mdp);//将含有信件内容的BodyPart加入到MimeMultipart对象中 //设置信件的附件1(自定义附件:直接将所设文本内容加到自定义文件中作为附件发送) mdp=new MimeBodyPart();//新建一个存放附件的BodyPart DataHandler dh=new DataHandler(tfj1,"text/plain;charset=gb2312"); //新建一个DataHandler对象,并设置其内容和格式/编码方式 mdp.setFileName("text.txt");//加上这句将作为附件发送,否则将作为信件的文本内容 mdp.setDataHandler(dh);//给BodyPart对象设置内容为dh mm.addBodyPart(mdp);//将含有附件的BodyPart加入到MimeMultipart对象中 //设置信件的附件2(用本地上的文件作为附件) mdp=new MimeBodyPart(); FileDataSource fds=new FileDataSource(tfj2); dh=new DataHandler(fds); int ddd=tfj2.lastIndexOf("\\"); String fname=tfj2.substring(ddd);//提取文件名 String ffname=new String(fname.getBytes("gb2312"),"ISO8859-1");//处理文件名是中文的情况 mdp.setFileName(ffname);//可以和原文件名不一致,但最好一样 mdp.setDataHandler(dh); mm.addBodyPart(mdp); //设置信件的附件3(用远程文件作为附件) mdp=new MimeBodyPart(); URL urlfj=new URL(tfj3); URLDataSource ur=new URLDataSource(urlfj); //注:这里用的参数只能为URL对象,不能为URL字串,在前面类介绍时有误(请谅解),这里纠正一下. dh=new DataHandler(ur); int ttt=tfj3.lastIndexOf("/"); String urlname=tfj3.substring(ttt); //String urlfname=new String(urlname.getBytes("gb2312"),"ISO8859-1");//不知怎么回事,这里不能处理中文问题 mdp.setFileName(urlname); mdp.setDataHandler(dh); mm.addBodyPart(mdp); message.setContent(mm);//把mm作为消息对象的内容 message.saveChanges(); Transport transport=s.getTransport("smtp"); transport.connect("127.0.0.1","xxf","coffee"); transport.sendMessage(message,message.getAllRecipients()); transport.close(); %> <div align="center"> <p><font color="#FF6600">发送成功!</font></p> <p><a href="recmail.jsp">去看看我的信箱</a><br> <br> <a href="index.htm">再发一封</a> </p> </div> <% }catch(MessagingException e){ out.println(e.toString()); } %> </body> </html>
先建一个html登录表单(recmain.jsp) -------------------------------------------------------------------------------------------------------------- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>邮箱登录</title> <link href="../images/styles.css" rel="stylesheet" type="text/css"> </head> <body> <form name="form1" method="post" action="holdrec.jsp"> <table width="279" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#009900" class="black"> <tr> <td colspan="2" bgcolor="#FFFFFF"> <div align="center">邮箱登录</div></td> </tr> <tr bgcolor="#FFFFFF"> <td width="75" height="20">用户名:</td> <td width="201"> <input name="username" type="text" id="username"></td> </tr> <tr bgcolor="#FFFFFF"> <td>密码:</td> <td> <input name="password" type="password" id="password"></td> </tr> <tr bgcolor="#FFFFFF"> <td height="19">POPServer:</td> <td><input name="popserver" type="text" id="popserver"></td> </tr> <tr> <td colspan="2" bgcolor="#FFFFFF"> <div align="center"> <input type="submit" name="Submit" value="提交"> <input type="reset" name="Submit2" value="重置"> </div></td> </tr> </table> </form> </body> </html>
进入后的邮件列表代码(hodrec.jsp) -------------------------------------------------------------------------------------------------------- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ page import="java.util.*,javax.mail.*"%> <%@ page import="javax.mail.internet.*"%> <%@ page import="javax.activation.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <%request.setCharacterEncoding("gb2312");%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>收件箱</title> </head> <% String popserver=request.getParameter("popserver"); String username=request.getParameter("username"); String password=request.getParameter("password"); %> <body> <% Store store=null; Folder folder=null; Properties props =new Properties(); Session s=Session.getInstance(props); store=s.getStore("pop3"); store.connect(popserver, username, password); folder = store.getDefaultFolder(); folder = folder.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message[] msgs = folder.getMessages(); for (int msgNum = 0; msgNum < msgs.length; msgNum++) { InternetAddress[] from=(InternetAddress[])msgs[msgNum].getFrom(); InternetAddress[] to=(InternetAddress[])msgs[msgNum].getRecipients(Message.RecipientType.TO); %> ----------------------------------------------------------------------------------------------- <p style="font-size:9pt;">发件人:<%=from[0].getAddress()%>,时间:<%=msgs[msgNum].getSentDate()%>,主题:<%=msgs[msgNum].getSubject()%>,大小:<%=msgs[msgNum].getSize()%>字节</p><p style="font-size:9pt;">内容:<font color=red><%=msgs[msgNum].getContent()%></font></p><br> <% } folder.close(false); store.close(); %> </body> </html>
下面是一个java发邮件的代码
public class JavaMailTest { //要发送Mail地址 private String mailTo = null; //Mail发送的起始地址 private String mailFrom = null; //SMTP主机地址 private String smtpHost = null; //是否采用调试方式 private boolean debug = false; private String messageBasePath = null; //Mail主题 private String subject; //Mail内容 private String msgContent; private Vector attachedFileList; private String mailAccount = null; private String mailPass = null; private String messageContentMimeType ="text/html; charset=gb2312"; private String mailbccTo = null; private String mailccTo = null; private void fillMail(Session session,MimeMessage msg) throws IOException, MessagingException { String fileName = null; Multipart mPart = new MimeMultipart(); if (mailFrom != null) { msg.setFrom(new InternetAddress(mailFrom)); System.out.println("发送人Mail地址:"+mailFrom); } else { System.out.println("没有指定发送人邮件地址!"); return; } if (mailTo != null) { InternetAddress[] address = InternetAddress.parse(mailTo); msg.setRecipients(Message.RecipientType.TO, address); System.out.println("收件人Mail地址:"+mailTo); } else { System.out.println("没有指定收件人邮件地址!"); return; } if (mailccTo != null) { InternetAddress[] ccaddress = InternetAddress.parse(mailccTo); System.out.println("CCMail地址:"+mailccTo); msg.setRecipients(Message.RecipientType.CC, ccaddress); } if (mailbccTo != null) { InternetAddress[] bccaddress = InternetAddress.parse(mailbccTo); System.out.println("BCCMail地址:"+mailbccTo); msg.setRecipients(Message.RecipientType.BCC, bccaddress); } msg.setSubject(subject); InternetAddress[] replyAddress = { new InternetAddress(mailFrom)}; msg.setReplyTo(replyAddress); // create and fill the first message part MimeBodyPart mBodyContent = new MimeBodyPart(); if (msgContent != null) mBodyContent.setContent(msgContent, messageContentMimeType); else mBodyContent.setContent("", messageContentMimeType); mPart.addBodyPart(mBodyContent); // attach the file to the message if (attachedFileList != null) { for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements();) { fileName = (String) fileList.nextElement(); MimeBodyPart mBodyPart = new MimeBodyPart(); // attach the file to the message FileDataSource fds = new FileDataSource(messageBasePath + fileName); System.out.println("Mail发送的附件为:"+messageBasePath + fileName); mBodyPart.setDataHandler(new DataHandler(fds)); mBodyPart.setFileName(fileName); mPart.addBodyPart(mBodyPart); } } msg.setContent(mPart); msg.setSentDate(new Date()); } /** * 发送e_mail,返回类型为int * 当返回值为0时,说明邮件发送成功 * 当返回值为3时,说明邮件发送失败 */ public int sendMail() throws IOException, MessagingException { int loopCount; Properties props = System.getProperties(); props.put("mail.smtp.host", smtpHost); props.put("mail.smtp.auth", "true"); MailAuthenticator auth = new MailAuthenticator(); Session session = Session.getInstance(props, auth); session.setDebug(debug); MimeMessage msg = new MimeMessage(session); Transport trans = null; try { fillMail(session,msg); // send the message trans = session.getTransport("smtp"); try { trans.connect(smtpHost, MailAuthenticator.HUAWEI_MAIL_USER, MailAuthenticator.HUAWEI_MAIL_PASSWORD);//, HUAWEI_MAIL_PASSWORD); } catch (AuthenticationFailedException e) { e.printStackTrace(); System.out.println("连接邮件服务器错误:"); return 3; } catch (MessagingException e) { System.out.println("连接邮件服务器错误:"); return 3; } trans.send(msg); trans.close(); } catch (MessagingException mex) { System.out.println("发送邮件失败:"); mex.printStackTrace(); Exception ex = null; if ((ex = mex.getNextException()) != null) { System.out.println(ex.toString()); ex.printStackTrace(); } return 3; } finally { try { if (trans != null && trans.isConnected()) trans.close(); } catch (Exception e) { System.out.println(e.toString()); } } System.out.println("发送邮件成功!"); return 0; } public void setAttachedFileList(java.util.Vector filelist) { attachedFileList = filelist; } public void setDebug(boolean debugFlag) { debug=debugFlag; } public void setMailAccount(String strAccount) { mailAccount = strAccount; } public void setMailbccTo(String bccto) { mailbccTo = bccto; } public void setMailccTo(String ccto) { mailccTo = ccto; } public void setMailFrom(String from) { mailFrom=from; } public void setMailPass(String strMailPass) { mailPass = strMailPass; } public void setMailTo(String to) { mailTo=to; } public void setMessageBasePath(String basePath) { messageBasePath=basePath; } public void setMessageContentMimeType(String mimeType) { messageContentMimeType = mimeType; } public void setMsgContent(String content) { msgContent=content; } public void setSMTPHost(String host) { smtpHost=host; } public void setSubject(String sub) { subject=sub; } public static void main(String[] argv) throws Exception { JavaMailTest sm = new JavaMailTest(); sm.setSMTPHost("smtp.163.com"); sm.setMailFrom("[email protected]"); sm.setMailTo("[email protected]"); sm.setMsgContent("test"); sm.setSubject("test"); sm.sendMail(); } } class MailAuthenticator extends Authenticator { //****************************** //由于发送邮件的地方比较多, //下面统一定义用户名,口令. //****************************** public static String HUAWEI_MAIL_USER = "[email protected]"; public static String HUAWEI_MAIL_PASSWORD = "XXX"; public MailAuthenticator() { } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(HUAWEI_MAIL_USER, HUAWEI_MAIL_PASSWORD); } }
参考文档:http://www.blogjava.net/action/archive/2006/04/24/42794.html
总结一下,javamail可以实现发送邮件的功能,要熟悉其中的几个核心的类。