欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于JavaMail实现邮件发送

程序员文章站 2022-06-05 08:38:32
通过javamail 实现发送邮件,供大家参考,具体内容如下 注意:服务器有些端口是没有开放的 需要去开放端口。 有些邮箱是需要开启对应授权服务的。 1.maven依赖...

通过javamail 实现发送邮件,供大家参考,具体内容如下

注意:服务器有些端口是没有开放的 需要去开放端口。 有些邮箱是需要开启对应授权服务的。

1.maven依赖:

<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --> 
<dependency >  
  <groupid >javax.mail </groupid >  
  <artifactid >mail </artifactid >  
  <version >1.4.5 </version >  
</dependency >  
<dependency >  
  <groupid >com.sun.mail </groupid >  
  <artifactid >javax.mail </artifactid >  
  </dependency >  

2.新建个实体类 用来保存信息

import java.util.properties; 
public class mailsenderinfo { 
   // 发送邮件的服务器的ip(或主机地址) 
   private string mailserverhost; 
   // 发送邮件的服务器的端口 
   private string mailserverport; 
   // 发件人邮箱地址 
   private string fromaddress; 
   // 收件人邮箱地址 
   private string toaddress; 
   // 登陆邮件发送服务器的用户名 
   private string username; 
   // 登陆邮件发送服务器的密码 
   private string password; 
   // 是否需要身份验证 
   private boolean validate = true; 
   // 邮件主题 
   private string subject; 
   // 邮件的文本内容 
   private string content; 
   // 邮件附件的文件名 
   private string[] attachfilenames; 
    
   public properties getproperties() { 
   properties p = new properties(); 
   p.put("mail.smtp.host", this.mailserverhost); 
   p.put("mail.smtp.port", this.mailserverport); 
   //设置是否安全验证,默认为false,一般情况都设置为true 
   p.put("mail.smtp.auth", "true");  
   p.put("mail.smtp.starttls.enable","true");  
   p.put("mail.smtp.enablessl.enable","true"); 
   return p; 
   } 
   public string getmailserverhost() { 
   return mailserverhost; 
   } 
   public void setmailserverhost(string mailserverhost) { 
   this.mailserverhost = mailserverhost; 
   } 
   public string getmailserverport() { 
   return mailserverport; 
   } 
   public void setmailserverport(string mailserverport) { 
   this.mailserverport = mailserverport; 
   } 
   public boolean isvalidate() { 
   return validate; 
   } 
   public void setvalidate(boolean validate) { 
   this.validate = validate; 
   } 
   public string[] getattachfilenames() { 
   return attachfilenames; 
   } 
   public void setattachfilenames(string[] filenames) { 
   this.attachfilenames = filenames; 
   } 
   public string getfromaddress() { 
   return fromaddress; 
   } 
   public void setfromaddress(string fromaddress) { 
   this.fromaddress = fromaddress; 
   } 
   public string getpassword() { 
   return password; 
   } 
   public void setpassword(string password) { 
   this.password = password; 
   } 
   public string gettoaddress() { 
   return toaddress; 
   } 
   public void settoaddress(string toaddress) { 
   this.toaddress = toaddress; 
   } 
   public string getusername() { 
   return username; 
   } 
   public void setusername(string username) { 
   this.username = username; 
   } 
   public string getsubject() { 
   return subject; 
   } 
   public void setsubject(string subject) { 
   this.subject = subject; 
   } 
   public string getcontent() { 
   return content; 
   } 
   public void setcontent(string textcontent) { 
   this.content = textcontent; 
   } 
} 

3.创建一个验证器

import javax.mail.authenticator; 
import javax.mail.passwordauthentication; 
 
/** 
 * 邮件用户名和密码认证器 
 */ 
public class myauthenticator extends authenticator{ 
   string username = null; 
   string password = null; 
   public myauthenticator() { 
   } 
   public myauthenticator(string username, string password) { 
   this.username = username; 
   this.password = password; 
   } 
   protected passwordauthentication getpasswordauthentication() { 
   return new passwordauthentication(username, password); 
   } 
} 

4.在调用的地方给实体类赋值

private void email(httpsession session, string email) { 
    // 设置邮件服务器信息 
    mailsenderinfo mailinfo = new mailsenderinfo(); 
    mailinfo.setmailserverhost("smtp-mail.outlook.com");// 发送邮件的服务器的ip(或主机地址) 
    mailinfo.setmailserverport("587");//有些端口在服务器上是没开放的 这里需要注意下 
    mailinfo.setvalidate(true); 
    // 邮箱用户名(根据自己情况设置) 这里可以多弄几个邮箱过来 避免邮箱账号需要验证 或者被当成垃圾邮件封号 a失败就用b 
    mailinfo.setusername("此处填写跟上面发送邮件服务器对应的邮箱"); 
    // 邮箱密码(根据自己情况设置) 
    mailinfo.setpassword("这是你的密码"); 
    // 发件人邮箱(根据自己情况设置,如果你没对邮箱进行特别设置,应该和邮箱用户名一致) 
    mailinfo.setfromaddress("这里跟上面一样"); 
    // 收件人邮箱(根据自己情况设置) 
    mailinfo.settoaddress(email); 
    // 邮件标题 
    mailinfo.setsubject("我是标题"); 
    // 邮件内容 
    mailinfo.setcontent("我是内容,正经的内容不是垃圾邮箱"); 
    // 发送邮件 
    simplemailsender sms = new simplemailsender(); 
    // 发送文体格式 
    sms.sendtextmail(mailinfo); 
  } 

5.这里才是真正的发送邮件

public class simplemailsender { 
  public boolean sendtextmail(mailsenderinfo mailinfo) { 
     // 判断是否需要身份认证 
     myauthenticator authenticator = null; 
     properties pro = mailinfo.getproperties(); 
     if (mailinfo.isvalidate()) { 
      // 如果需要身份认证,则创建一个密码验证器 
      authenticator = new myauthenticator(mailinfo.getusername(), mailinfo.getpassword()); 
     } 
     // 根据邮件会话属性和密码验证器构造一个发送邮件的session 
     session sendmailsession = session.getdefaultinstance(pro, authenticator); 
     try { 
      // 根据session创建一个邮件消息 
      message mailmessage = new mimemessage(sendmailsession); 
      // 创建邮件发送者地址 
      address from = new internetaddress(mailinfo.getfromaddress()); 
      // 设置邮件消息的发送者 
      mailmessage.setfrom(from); 
      // 创建邮件的接收者地址,并设置到邮件消息中 
      address to = new internetaddress(mailinfo.gettoaddress()); 
      mailmessage.setrecipient(message.recipienttype.to, to); 
      // 设置邮件消息的主题 
      mailmessage.setsubject(mailinfo.getsubject()); 
      // 设置邮件消息发送的时间 
      mailmessage.setsentdate(new date()); 
      // 设置邮件消息的主要内容 
      string mailcontent = mailinfo.getcontent(); 
      mailmessage.settext(mailcontent); 
      mailmessage.savechanges(); 
      // 发送邮件 
      transport.send(mailmessage); 
      return true; 
     } catch (messagingexception ex) { 
      ex.printstacktrace(); 
     } 
     return false; 
     } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。