zl程序教程

您现在的位置是:首页 >  后端

当前栏目

javamail发送邮件的实例代码分享

实例代码 分享 发送 邮件 JavaMail
2023-06-13 09:15:04 时间
注意:要先导入javamail的mail.jar包
以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。
第一个类:MailSenderInfo.java
复制代码代码如下:

packagecom.util.mail;
importjava.util.Properties;
/**
 *发送邮件需要使用的基本信息
 */
publicclassMailSenderInfo{
   //发送邮件的服务器的IP和端口
   privateStringmailServerHost;
   privateStringmailServerPort="25";
   //邮件发送者的地址
   privateStringfromAddress;
   //邮件接收者的地址
   privateStringtoAddress;
   //登录邮件发送服务器的用户名和密码
   privateStringuserName;
   privateStringpassword;
   //是否需要身份验证
   privatebooleanvalidate=false;
   //邮件主题
   privateStringsubject;
   //邮件的文本内容
   privateStringcontent;
   //邮件附件的文件名
   privateString[]attachFileNames;
   /**
    *获得邮件会话属性
    */
   publicPropertiesgetProperties(){
       Propertiesp=newProperties();
       p.put("mail.smtp.host",this.mailServerHost);
       p.put("mail.smtp.port",this.mailServerHost);
       p.put("mail.smtp.auth",validate?"true":"false");
       returnp;
   }
   publicStringgetMailServerHost(){
       returnmailServerHost;
   }
   publicvoidsetMailServerHost(StringmailServerHost){
       this.mailServerHost=mailServerHost;
   }
   publicStringgetMailServerPort(){
       returnmailServerPort;
   }
   publicvoidsetMailServerPort(StringmailServerPort){
       this.mailServerPort=mailServerPort;
   }
   publicbooleanisValidate(){
       returnvalidate;
   }
   publicvoidsetValidate(booleanvalidate){
       this.validate=validate;
   }
   publicString[]getAttachFileNames(){
       returnattachFileNames;
   }
   publicvoidsetAttachFileNames(String[]attachFileNames){
       this.attachFileNames=attachFileNames;
   }
   publicStringgetFromAddress(){
       returnfromAddress;
   }
   publicvoidsetFromAddress(StringfromAddress){
       this.fromAddress=fromAddress;
   }
   publicStringgetPassword(){
       returnpassword;
   }
   publicvoidsetPassword(Stringpassword){
       this.password=password;
   }
   publicStringgetToAddress(){
       returntoAddress;
   }
   publicvoidsetToAddress(StringtoAddress){
       this.toAddress=toAddress;
   }
   publicStringgetUserName(){
       returnuserName;
   }
   publicvoidsetUserName(StringuserName){
       this.userName=userName;
   }
   publicStringgetSubject(){
       returnsubject;
   }
   publicvoidsetSubject(Stringsubject){
       this.subject=subject;
   }
   publicStringgetContent(){
       returncontent;
   }
   publicvoidsetContent(Stringcontent){
       this.content=content;
   }
}

第二个类:SimpleMailSender.java
复制代码代码如下:

packagecom.util.mail;
importjava.util.Date;
importjava.util.Properties;
importjavax.mail.Address;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.AddressException;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
/**
 *简单邮件(不带附件)发送器
 */
publicclassSimpleMailSender{
   /**
    *以文本格式发送邮件
    *@parammailInfo待发送的邮件的信息
    */
   publicbooleansendTextMail(MailSenderInfomailInfo){
       //判断是否需要身份认证
       MyAuthenticatorauthenticator=null;
       Propertiespro=mailInfo.getProperties();
       if(mailInfo.isValidate()){
           //如果需要身份认证,则创建一个密码验证器
           authenticator=newMyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
       }
       //根据邮件会话属性和密码验证器构造一个发送邮件的session
       SessionsendMailSession=Session.getDefaultInstance(pro,authenticator);
       try{
           //根据session创建一个邮件消息
           MessagemailMessage=newMimeMessage(sendMailSession);
           //创建邮件发送者地址
           Addressfrom=newInternetAddress(mailInfo.getFromAddress());
           //设置邮件消息的发送者
           mailMessage.setFrom(from);
           //创建邮件的接收者地址,并设置到邮件消息中
           Addressto=newInternetAddress(mailInfo.getToAddress());
           //Message.RecipientType.TO属性表示接收者的类型为TO
           mailMessage.setRecipient(Message.RecipientType.TO,to);
           //设置邮件消息的主题
           mailMessage.setSubject(mailInfo.getSubject());
           //设置邮件消息发送的时间
           mailMessage.setSentDate(newDate());
           //设置邮件消息的主要内容
           StringmailContent=mailInfo.getContent();
            mailMessage.setText(mailContent);
            //发送邮件
            Transport.send(mailMessage);
            returntrue;
       }catch(AddressExceptione){
           e.printStackTrace();
       }catch(MessagingExceptione){
           e.printStackTrace();
       }
       returnfalse;
   }
   /**
    *以Html格式发送邮件
    *@parammailInfo待发送的邮件的信息
    */
   publicbooleansendHtmlMail(MailSenderInfomailInfo){
       //判断是否需要身份认证
       MyAuthenticatorauthenticator=null;
       Propertiespro=mailInfo.getProperties();
       if(mailInfo.isValidate()){
           //如果需要身份认证,则创建一个密码验证器
           authenticator=newMyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
       }
       //根据邮件会话属性和密码验证器构造一个发送邮件的session
       SessionsendMailSession=Session.getDefaultInstance(pro,authenticator);
       try{
           //根据session创建一个邮件消息
           MessagemailMessage=newMimeMessage(sendMailSession);
           //创建邮件发送者地址
           Addressfrom=newInternetAddress(mailInfo.getFromAddress());
           //设置邮件消息的发送者
           mailMessage.setFrom(from);
           //创建邮件的接收者地址,并设置到邮件消息中
           Addressto=newInternetAddress(mailInfo.getToAddress());
           //Message.RecipientType.TO属性表示接收者的类型为TO
           mailMessage.setRecipient(Message.RecipientType.TO,to);
           //设置邮件消息的主题
           mailMessage.setSubject(mailInfo.getSubject());
           //设置邮件消息发送的时间
           mailMessage.setSentDate(newDate());
           //MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
           MultipartmainPart=newMimeMultipart();
           //创建一个包含HTML内容的MimeBodyPart
           BodyParthtml=newMimeBodyPart();
           //设置HTML内容
           html.setContent(mailInfo.getContent(),"text/html;charset=utf-8");
           mainPart.addBodyPart(html);
           //将mainPart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            //发送邮件
            Transport.send(mailMessage);
            returntrue;
       }catch(AddressExceptione){
           e.printStackTrace();
       }catch(MessagingExceptione){
           e.printStackTrace();
       }
       returnfalse;
   }
}

第三个类:MyAuthenticator.java
复制代码代码如下:
packagecom.util.mail;
importjavax.mail.*;
/**
 *身份认证
 */
publicclassMyAuthenticatorextendsAuthenticator{
   StringuserName=null;
   Stringpassword=null;
   publicMyAuthenticator(){
   }
   publicMyAuthenticator(Stringusername,Stringpassword){
       this.userName=username;
       this.password=password;
   }
   @Override
   protectedPasswordAuthenticationgetPasswordAuthentication(){
       returnnewPasswordAuthentication(userName,password);
   }
}

下面给出使用上面三个类的代码:
复制代码代码如下:
packagecom.util.mail;
/**
 *发送邮件
 */
publicclassMail{
   /**
    *@paramargs
    */
   publicstaticvoidmain(String[]args){
       //这个类主要是设置邮件
       MailSenderInfomailInfo=newMailSenderInfo();
       mailInfo.setMailServerHost("smtp.126.com");
       mailInfo.setMailServerPort("25");
       mailInfo.setValidate(true);
       mailInfo.setUserName("test@126.com");
       mailInfo.setPassword("test");
       mailInfo.setFromAddress("test@126.com");
       mailInfo.setToAddress("test@qq.com");
       mailInfo.setSubject("设置邮箱标题如http://www.guihua.org中国桂花网");
       mailInfo.setContent("设置邮箱内容如http://www.guihua.org中国桂花网是中国最大桂花网站==");
       //这个类主要来发送邮件
       SimpleMailSendersms=newSimpleMailSender();
       sms.sendTextMail(mailInfo);
       sms.sendHtmlMail(mailInfo);
   }
}

最后,给出朋友们几个注意的地方:
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");与mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。