最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解

 更新時(shí)間:2020年07月17日 11:54:50   作者:Marvellous丶  
這篇文章主要介紹了Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Java實(shí)現(xiàn)郵件發(fā)送

一、郵件服務(wù)器與傳輸協(xié)議

要在網(wǎng)絡(luò)上實(shí)現(xiàn)郵件功能,必須要有專(zhuān)門(mén)的郵件服務(wù)器。這些郵件服務(wù)器類(lèi)似于現(xiàn)實(shí)生活中的郵局,它主要負(fù)責(zé)接收用戶(hù)投遞過(guò)來(lái)的郵件,并把郵件投遞到郵件接收者的電子郵箱中。

SMTP服務(wù)器地址:一般是 smtp.xxx.com,比如163郵箱是smtp.163.com,qq郵箱是smtp.qq.com。

SMTP協(xié)議
通常把處理用戶(hù)smtp請(qǐng)求(郵件發(fā)送請(qǐng)求)的服務(wù)器稱(chēng)之為SMTP服務(wù)器(郵件發(fā)送服務(wù)器)。

POP3協(xié)議
通常把處理用戶(hù)pop3請(qǐng)求(郵件接收請(qǐng)求)的服務(wù)器稱(chēng)之為POP3服務(wù)器(郵件接收服務(wù)器)。

二、Java發(fā)送郵件

使用到的jar包:

  • mail.jar
  • activation.jar

QQ郵箱需獲取相應(yīng)的權(quán)限:

QQ郵箱–>郵箱設(shè)置–>賬戶(hù)–>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù) 開(kāi)啟POP3/SMTP服務(wù),然后獲取16位授權(quán)碼(注意不要將授權(quán)碼泄露,一個(gè)賬戶(hù)可以擁有多個(gè)授權(quán)碼)

Java實(shí)現(xiàn)純文本郵件發(fā)送

package org.westos.email;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class SendEamil {
 public static void main(String[] args) throws MessagingException, GeneralSecurityException {
  //創(chuàng)建一個(gè)配置文件并保存
  Properties properties = new Properties();

  properties.setProperty("mail.host","smtp.qq.com");

  properties.setProperty("mail.transport.protocol","smtp");

  properties.setProperty("mail.smtp.auth","true");


  //QQ存在一個(gè)特性設(shè)置SSL加密
  MailSSLSocketFactory sf = new MailSSLSocketFactory();
  sf.setTrustAllHosts(true);
  properties.put("mail.smtp.ssl.enable", "true");
  properties.put("mail.smtp.ssl.socketFactory", sf);

  //創(chuàng)建一個(gè)session對(duì)象
  Session session = Session.getDefaultInstance(properties, new Authenticator() {
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
   }
  });

  //開(kāi)啟debug模式
  session.setDebug(true);

  //獲取連接對(duì)象
  Transport transport = session.getTransport();

  //連接服務(wù)器
  transport.connect("smtp.qq.com","619046217@qq.com","16位授權(quán)碼");

  //創(chuàng)建郵件對(duì)象
  MimeMessage mimeMessage = new MimeMessage(session);

  //郵件發(fā)送人
  mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));

  //郵件接收人
  mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("875203654@qq.com"));

  //郵件標(biāo)題
  mimeMessage.setSubject("Hello Mail");

  //郵件內(nèi)容
  mimeMessage.setContent("我的想法是把代碼放進(jìn)一個(gè)循環(huán)里","text/html;charset=UTF-8");

  //發(fā)送郵件
  transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

  //關(guān)閉連接
  transport.close();
 }
}

Java實(shí)現(xiàn)文本圖片附件復(fù)雜的郵件發(fā)送

MIME(多用途互聯(lián)網(wǎng)郵件擴(kuò)展類(lèi)型)

MimeBodyPart類(lèi)

javax.mail.internet.MimeBodyPart類(lèi) 表示的是一個(gè)MIME消息,它和MimeMessage類(lèi)一樣都是從Part接口繼承過(guò)來(lái)。

MimeMultipart類(lèi)

javax.mail.internet.MimeMultipart是抽象類(lèi) Multipart的實(shí)現(xiàn)子類(lèi),它用來(lái)組合多個(gè)MIME消息。一個(gè)MimeMultipart對(duì)象可以包含多個(gè)代表MIME消息的MimeBodyPart對(duì)象

package org.westos.email;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class SendComplexEmail {
 public static void main(String[] args) throws GeneralSecurityException, MessagingException {
  Properties prop = new Properties();
  prop.setProperty("mail.host", "smtp.qq.com"); //// 設(shè)置QQ郵件服務(wù)器
  prop.setProperty("mail.transport.protocol", "smtp"); // 郵件發(fā)送協(xié)議
  prop.setProperty("mail.smtp.auth", "true"); // 需要驗(yàn)證用戶(hù)名密碼

  // QQ郵箱設(shè)置SSL加密
  MailSSLSocketFactory sf = new MailSSLSocketFactory();
  sf.setTrustAllHosts(true);
  prop.put("mail.smtp.ssl.enable", "true");
  prop.put("mail.smtp.ssl.socketFactory", sf);

  //1、創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對(duì)象
  Session session = Session.getDefaultInstance(prop, new Authenticator() {
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    //傳入發(fā)件人的姓名和授權(quán)碼
    return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
   }
  });

  //2、通過(guò)session獲取transport對(duì)象
  Transport transport = session.getTransport();

  //3、通過(guò)transport對(duì)象郵箱用戶(hù)名和授權(quán)碼連接郵箱服務(wù)器
  transport.connect("smtp.qq.com","619046217@qq.com","16位授權(quán)碼");

  //4、創(chuàng)建郵件,傳入session對(duì)象
  MimeMessage mimeMessage = complexEmail(session);

  //5、發(fā)送郵件
  transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

  //6、關(guān)閉連接
  transport.close();


 }

 public static MimeMessage complexEmail(Session session) throws MessagingException {
  //消息的固定信息
  MimeMessage mimeMessage = new MimeMessage(session);

  //發(fā)件人
  mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));
  //收件人
  mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("619046217@qq.com"));
  //郵件標(biāo)題
  mimeMessage.setSubject("帶圖片和附件的郵件");

  //郵件內(nèi)容
  //準(zhǔn)備圖片數(shù)據(jù)
  MimeBodyPart image = new MimeBodyPart();
  DataHandler handler = new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\測(cè)試圖片.png"));
  image.setDataHandler(handler);
  image.setContentID("test.png"); //設(shè)置圖片id

  //準(zhǔn)備文本
  MimeBodyPart text = new MimeBodyPart();
  text.setContent("這是一段文本<img src='cid:test.png'>","text/html;charset=utf-8");

  //附件
  MimeBodyPart appendix = new MimeBodyPart();
  appendix.setDataHandler(new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\測(cè)試文件.txt")));
  appendix.setFileName("test.txt");

  //拼裝郵件正文
  MimeMultipart mimeMultipart = new MimeMultipart();
  mimeMultipart.addBodyPart(image);
  mimeMultipart.addBodyPart(text);
  mimeMultipart.setSubType("related");//文本和圖片內(nèi)嵌成功

  //將拼裝好的正文內(nèi)容設(shè)置為主體
  MimeBodyPart contentText = new MimeBodyPart();
  contentText.setContent(mimeMultipart);

  //拼接附件
  MimeMultipart allFile = new MimeMultipart();
  allFile.addBodyPart(appendix);//附件
  allFile.addBodyPart(contentText);//正文
  allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類(lèi)型設(shè)置為mixed


  //放到Message消息中
  mimeMessage.setContent(allFile);
  mimeMessage.saveChanges();//保存修改

  return mimeMessage;
 }
}

JavaWeb發(fā)送郵件(網(wǎng)站注冊(cè)成功發(fā)送提示郵件)

1.User

package org.westos.mail;

public class User {
 private String name;
 private String password;
 private String mail;

 public User() {
 }

 public User(String name, String password, String mail) {
  this.name = name;
  this.password = password;
  this.mail = mail;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getMail() {
  return mail;
 }

 public void setMail(String mail) {
  this.mail = mail;
 }

 @Override
 public String toString() {
  return "User{" +
    "name='" + name + '\'' +
    ", password='" + password + '\'' +
    ", mail='" + mail + '\'' +
    '}';
 }
}

2.Servlet

package org.westos.mail;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet extends javax.servlet.http.HttpServlet {
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request,response);
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) {
  //處理前端請(qǐng)求
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  String email = request.getParameter("email");

  //將信息封裝進(jìn)user對(duì)象
  User user = new User(username, password, email);

  SendMail sendMail = new SendMail(user);
  sendMail.start(); //開(kāi)啟線(xiàn)程

  request.setAttribute("msg","發(fā)送成功");
  try {
   request.getRequestDispatcher("msg.jsp").forward(request,response);
  } catch (ServletException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }


 }
}

3.SengMail

package org.westos.mail;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import java.util.Properties;

public class SendMail extends Thread {
 //發(fā)件人信息
 private String From = "619046217@qq.com";
 //發(fā)件人郵箱
 private String recipient = "619046217@qq.com";
 //郵箱密碼
 private String password = "16位授權(quán)碼";
 //郵件發(fā)送的服務(wù)器
 private String host = "smtp.qq.com";

 //收件人信息
 private User user;
 public SendMail(User user){
  this.user = user;
 }

 @Override
 public void run() {
  try {
   Properties properties = new Properties();

   properties.setProperty("mail.host","smtp.qq.com");

   properties.setProperty("mail.transport.protocol","smtp");

   properties.setProperty("mail.smtp.auth","true");

   //QQ存在一個(gè)特性設(shè)置SSL加密
   MailSSLSocketFactory sf = null;
   try {
    sf = new MailSSLSocketFactory();
   } catch (GeneralSecurityException e) {
    e.printStackTrace();
   }
   sf.setTrustAllHosts(true);
   properties.put("mail.smtp.ssl.enable", "true");
   properties.put("mail.smtp.ssl.socketFactory", sf);

   //創(chuàng)建一個(gè)session對(duì)象
   Session session = Session.getDefaultInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication(recipient,password);
    }
   });

   //開(kāi)啟debug模式
   session.setDebug(true);

   //獲取連接對(duì)象
   Transport transport = null;
   try {
    transport = session.getTransport();
   } catch (NoSuchProviderException e) {
    e.printStackTrace();
   }

   //連接服務(wù)器
   transport.connect(host,From,password);


   //創(chuàng)建一個(gè)郵件發(fā)送對(duì)象
   MimeMessage mimeMessage = new MimeMessage(session);
   //郵件發(fā)送人
   mimeMessage.setFrom(new InternetAddress(recipient));

   //郵件接收人
   mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getMail()));

   //郵件標(biāo)題
   mimeMessage.setSubject("網(wǎng)站注冊(cè)成功");

   //郵件內(nèi)容
   mimeMessage.setContent("網(wǎng)站注冊(cè)成功,密碼為"+user.getPassword()+",請(qǐng)妥善保管密碼","text/html;charset=UTF-8");

   //發(fā)送郵件
   transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

   transport.close();

  }catch (Exception e){
   e.printStackTrace();
  }

 }

}

4.register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>注冊(cè)頁(yè)面</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/a.do" method="post">
 <p>用戶(hù)名:<input type="text" name="username" required></p>
 <p>密碼:<input type="password" name="password" required></p>
 <p>郵箱:<input type="email" name="email" required></p>
 <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

5.msg.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

6.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
   version="4.0">
 <servlet>
  <servlet-name>Servlet</servlet-name>
  <servlet-class>org.westos.mail.Servlet</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>Servlet</servlet-name>
  <url-pattern>/a.do</url-pattern>
 </servlet-mapping>
</web-app>

到此這篇關(guān)于Java實(shí)現(xiàn)郵件發(fā)送的過(guò)程及代碼詳解的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)郵件發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    近期接到了一個(gè)小需求,要將系統(tǒng)中的數(shù)據(jù)導(dǎo)出為Excel,且能將Excel數(shù)據(jù)導(dǎo)入到系統(tǒng),對(duì)于大多數(shù)研發(fā)人員來(lái)說(shuō),這算是一個(gè)最基本的操作了,本文就給大家總結(jié)一下SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-01-01
  • SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn)

    SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn)

    本文主要介紹了SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringCloud中分析講解Feign組件添加請(qǐng)求頭有哪些坑梳理

    SpringCloud中分析講解Feign組件添加請(qǐng)求頭有哪些坑梳理

    在spring?cloud的項(xiàng)目中用到了feign組件,簡(jiǎn)單配置過(guò)后即可完成請(qǐng)求的調(diào)用。又因?yàn)橛邢蛘?qǐng)求添加Header頭的需求,查閱了官方示例后,就覺(jué)得很簡(jiǎn)單,然后一頓操作之后調(diào)試報(bào)錯(cuò)...下面我們來(lái)詳細(xì)了解
    2022-06-06
  • Maven遠(yuǎn)程倉(cāng)庫(kù)地址修改實(shí)現(xiàn)解析

    Maven遠(yuǎn)程倉(cāng)庫(kù)地址修改實(shí)現(xiàn)解析

    這篇文章主要介紹了Maven遠(yuǎn)程倉(cāng)庫(kù)地址修改實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • springboot springmvc拋出全局異常的解決方法

    springboot springmvc拋出全局異常的解決方法

    這篇文章主要為大家詳細(xì)介紹了springboot springmvc拋出全局異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 兩分鐘解決IntelliJ IDEA中文亂碼問(wèn)題(推薦)

    兩分鐘解決IntelliJ IDEA中文亂碼問(wèn)題(推薦)

    這篇文章主要介紹了兩分鐘解決IntelliJ IDEA中文亂碼問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 使用Mybatis-plus實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的內(nèi)部字段進(jìn)行比較

    使用Mybatis-plus實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的內(nèi)部字段進(jìn)行比較

    這篇文章主要介紹了使用Mybatis-plus實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表的內(nèi)部字段進(jìn)行比較方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    近年來(lái),二維碼的使用越來(lái)越風(fēng)生水起,本篇文章主要介紹了Java二維碼登錄流程實(shí)現(xiàn)代碼,其中包含短地址生成,有興趣的可以了解一下。
    2016-12-12
  • SpringBoot基于數(shù)據(jù)庫(kù)的定時(shí)任務(wù)統(tǒng)一管理的實(shí)現(xiàn)

    SpringBoot基于數(shù)據(jù)庫(kù)的定時(shí)任務(wù)統(tǒng)一管理的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot基于數(shù)據(jù)庫(kù)的定時(shí)任務(wù)統(tǒng)一管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java實(shí)現(xiàn)俄羅斯方塊

    java實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論

江津市| 华阴市| 崇仁县| 古丈县| 深水埗区| 湘阴县| 东乡县| 榆社县| 尚义县| 安泽县| 揭阳市| 莫力| 镇巴县| 华容县| 银川市| 江门市| 新竹县| 德州市| 咸阳市| 宜兴市| 孟州市| 象州县| 盐亭县| 阳高县| 涟水县| 德钦县| 江华| 阿图什市| 临朐县| 祁门县| 安达市| 南雄市| 湘阴县| 石狮市| 伊春市| 扬州市| 田阳县| 青冈县| 堆龙德庆县| 青铜峡市| 山丹县|