欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

SMTP協(xié)議
通常把處理用戶smtp請求(郵件發(fā)送請求)的服務器稱之為SMTP服務器(郵件發(fā)送服務器)。

POP3協(xié)議
通常把處理用戶pop3請求(郵件接收請求)的服務器稱之為POP3服務器(郵件接收服務器)。

二、Java發(fā)送郵件

使用到的jar包:

  • mail.jar
  • activation.jar

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

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

Java實現(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)建一個配置文件并保存
  Properties properties = new Properties();

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

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

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


  //QQ存在一個特性設(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)建一個session對象
  Session session = Session.getDefaultInstance(properties, new Authenticator() {
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
   }
  });

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

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

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

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

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

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

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

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

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

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

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

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

MimeBodyPart類

javax.mail.internet.MimeBodyPart類 表示的是一個MIME消息,它和MimeMessage類一樣都是從Part接口繼承過來。

MimeMultipart類

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

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郵件服務器
  prop.setProperty("mail.transport.protocol", "smtp"); // 郵件發(fā)送協(xié)議
  prop.setProperty("mail.smtp.auth", "true"); // 需要驗證用戶名密碼

  // 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)建定義整個應用程序所需的環(huán)境信息的 Session 對象
  Session session = Session.getDefaultInstance(prop, new Authenticator() {
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    //傳入發(fā)件人的姓名和授權(quán)碼
    return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
   }
  });

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

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

  //4、創(chuàng)建郵件,傳入session對象
  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"));
  //郵件標題
  mimeMessage.setSubject("帶圖片和附件的郵件");

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

  //準備文本
  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\\測試文件.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"); //正文和附件都存在郵件中,所有類型設(shè)置為mixed


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

  return mimeMessage;
 }
}

JavaWeb發(fā)送郵件(網(wǎng)站注冊成功發(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) {
  //處理前端請求
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  String email = request.getParameter("email");

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

  SendMail sendMail = new SendMail(user);
  sendMail.start(); //開啟線程

  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ā)送的服務器
 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存在一個特性設(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)建一個session對象
   Session session = Session.getDefaultInstance(properties, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication(recipient,password);
    }
   });

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

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

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


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

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

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

   //郵件內(nèi)容
   mimeMessage.setContent("網(wǎng)站注冊成功,密碼為"+user.getPassword()+",請妥善保管密碼","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>注冊頁面</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/a.do" method="post">
 <p>用戶名:<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實現(xiàn)郵件發(fā)送的過程及代碼詳解的文章就介紹到這了,更多相關(guān)Java實現(xiàn)郵件發(fā)送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合RocketMQ的方法詳解

    SpringBoot整合RocketMQ的方法詳解

    這篇文章主要為大家詳細介紹了SpringBoot整合RocketMQ的方法,文中的示例代碼講解詳細,對我們學習有一定幫助,感興趣的小伙伴可以了解一下
    2022-08-08
  • Java中CAS機制實現(xiàn)方法詳解

    Java中CAS機制實現(xiàn)方法詳解

    傳統(tǒng)的并發(fā)控制手段如synchronized和ReentrantLock雖有效防止資源競爭,卻可能引起性能開銷,相比之下,CAS(CompareAndSwap)提供一種輕量級的樂觀鎖策略,通過硬件級別的原子指令實現(xiàn)無鎖并發(fā),提高性能,需要的朋友可以參考下
    2024-09-09
  • Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類實例

    Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類實例

    這篇文章主要介紹了Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類,結(jié)合完整實例形式分析了Java日期轉(zhuǎn)換與字符串操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Java整合Redis實現(xiàn)坐標附近查詢功能

    Java整合Redis實現(xiàn)坐標附近查詢功能

    這篇文章主要介紹了Java整合Redis實現(xiàn)坐標附近查詢,我們可以在redis服務器使用命令 help xxx 查看指令的具體用法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2023-11-11
  • java環(huán)境中的JDK、JVM、JRE詳細介紹

    java環(huán)境中的JDK、JVM、JRE詳細介紹

    這篇文章主要介紹了java環(huán)境中的JDK、JVM、JRE詳細介紹的相關(guān)資料,對于初學者還是有必要了解下,細致說明他們是什么,需要的朋友可以參考下
    2016-11-11
  • 什么是jsoup及jsoup的使用

    什么是jsoup及jsoup的使用

    jsoup是一款基于Java的HTML解析器,它提供了一套非常省力的API,不但能直接解析某個URL地址、HTML文本內(nèi)容,而且還能通過類似于DOM、CSS或者jQuery的方法來操作數(shù)據(jù),所以?jsoup?也可以被當做爬蟲工具使用,這篇文章主要介紹了什么是jsoup及jsoup的使用,需要的朋友可以參考下
    2023-10-10
  • 詳解spring boot中使用JdbcTemplate

    詳解spring boot中使用JdbcTemplate

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務管理能力。 通過使用SpringBoot自動配置功能并代替我們自動配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識,一起看看吧
    2017-04-04
  • LinkedHashMap如何保證有序問題

    LinkedHashMap如何保證有序問題

    這篇文章主要介紹了LinkedHashMap如何保證有序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring?Cloud?Ribbon?負載均衡使用策略示例詳解

    Spring?Cloud?Ribbon?負載均衡使用策略示例詳解

    Spring?Cloud?Ribbon?是基于Netflix?Ribbon?實現(xiàn)的一套客戶端負載均衡工具,Ribbon客戶端組件提供了一系列的完善的配置,如超時,重試等,這篇文章主要介紹了Spring?Cloud?Ribbon?負載均衡使用策略示例詳解,需要的朋友可以參考下
    2023-03-03
  • 詳解eclipse項目中的.classpath文件原理

    詳解eclipse項目中的.classpath文件原理

    這篇文章介紹了eclipse項目中的.classpath文件的原理,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12

最新評論