天天看點

JAVA--發送Google郵件

文章目錄

  • 1、介紹
  • 2、郵箱配置
    • 1、直接使用應用專用密碼: 先開啟兩步驗證, 在配置應用專用密碼.
    • 2、啟用郵箱POP
  • 2、代碼
  • 3、注意點
  • 4、伺服器發送郵件

1、介紹

網上的Google郵件發送也有很多, 這裡也隻是把我自己碰到的一些問題給記錄一下

JAVA--發送Google郵件

package com.tolern.base.util.email;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

/**
 * @author Tomorrow
 * @date 2020/11/2 17:41
 */
public class GoogleTest {
    /*
     * gmail郵箱SSL方式
     */
    private static void gmailssl(Properties props) {
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        props.put("mail.debug", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.auth", "true");
    }


    //gmail郵箱的TLS方式
    private static void gmailtls(Properties props) {
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
    }

    /**
     * 建立郵件内容 需科學上網
     *
     * @param sentToEmail 接收人郵箱
     * @return
     * @throws Exception
     */
    public static boolean getMimeMessage(String sentToEmail) throws Exception {
        //1.建立一封郵件的執行個體對象
        Properties props = new Properties();
        //選擇ssl方式
        gmailtls(props);

        final String username = "[email protected]";// gmail 郵箱
        final String password = "123132";// Google應用專用密碼
        // 當做多商戶的時候需要使用getInstance, 如果隻是一個郵箱發送的話就用getDefaultInstance
        // Session.getDefaultInstance 會将username,password儲存在session會話中
        // Session.getInstance 不進行儲存
        Session session = Session.getInstance(props,
                new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });

        MimeMessage msg = new MimeMessage(session);
        //2.設定發件人位址
        msg.setFrom(new InternetAddress(sentToEmail));
        /**
         * 3.設定收件人位址(可以增加多個收件人、抄送、密送),即下面這一行代碼書寫多行
         * MimeMessage.RecipientType.TO:發送
         * MimeMessage.RecipientType.CC:抄送
         * MimeMessage.RecipientType.BCC:密送
         */
        msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(sentToEmail));
        //4.設定郵件主題
        msg.setSubject("To reset your password!", "UTF-8");

        // 6. 建立文本"節點"
        MimeBodyPart text = new MimeBodyPart();
        // 這裡添加圖檔的方式是将整個圖檔包含到郵件内容中, 實際上也可以以 http 連結的形式添加網絡圖檔
        text.setContent("<p>親愛的使用者:</p>" +
                        "<p>&nbsp; &nbsp; 您好! 您正在進行重置密碼操作, 本次生成的密碼為:</p>" +
                        "<p>&nbsp;&nbsp;&nbsp;&nbsp;\u200B" + 1234 + "&nbsp;(為了保障您帳号的安全性,請盡快修改密碼)</p>" +
                        "<p><br></p><p>該郵件為系統自動發送, 請勿進行回複!</p>" +
                        "<p><br></p>",
                "text/html;charset=UTF-8");

        // 7. (文本+圖檔)設定 文本 和 圖檔"節點"的關系(将 文本 和 圖檔"節點"合成一個混合"節點")
        MimeMultipart mm_text_image = new MimeMultipart();
        mm_text_image.addBodyPart(text);
        mm_text_image.setSubType("related");    // 關聯關系


        // 11. 設定整個郵件的關系(将最終的混合"節點"作為郵件的内容添加到郵件對象)
        msg.setContent(mm_text_image);
        //設定郵件的發送時間,預設立即發送
        msg.setSentDate(new Date());

        Transport.send(msg);
        return true;
    }

    public static void main(String[] args) throws Exception {
        boolean mimeMessage = getMimeMessage("[email protected]");
        System.out.println(mimeMessage);
    }
}

           
<div>
			<div style="text-align: center; border-bottom: 2px solid #ccc; padding: 20px 0;">
				<img style="width: 225px;" src="https://***-image.oss-eu-central-1***m/***/***.png" />
			</div>
			<div style="padding: 10px 25px;">
				<p style="font-size: 20px; font-family: 'arial'; color: rgba(0,0,0,0.9);">Hi (CLIENT_NAME)!</p>
				<div style="height: 5px;"></div>
				<p style="font-size: 20px; font-family: 'arial'; color: rgba(0,0,0,0.9);">Please click on the link below to verify your email address:</p>
				<div style="height: 10px;"></div>
				<a href="BINDING_EMAIL" style="display: block; text-decoration: none; background: #61B9AA;  text-align: center; height: 70px; line-height: 70px; margin: 0 auto; border-radius: 10px;" target="_blank" style="text-align:center;">
					<span style="font-family: arial; color: #fff;font-size: 22px;">
						Verify Email
					</span>
				</a>
				</p>
				<div style="height: 5px;"></div>
				<p style="font-size: 20px; font-family: 'arial'; color: rgba(0,0,0,0.9);">Or, if the link is not working, copy and paste this code in the app: <span style="color: #61B9AA;">NUMBER_EMAIL</span></p>
				<div style="height: 5px;"></div>
				<p style="font-size: 20px; font-family: 'arial'; color: rgba(0,0,0,0.9);">Happy charging!</p>
				<div style="height: 5px;"></div>
				<p style="font-size: 20px; font-family: 'arial'; color: rgba(0,0,0,0.9);">The Chargie Team</p>
			</div>
		</div>
           

3、注意點

1、安裝mailx:yum install -y mailx
2、編輯配置檔案:vim /etc/mail.rc
在最後面添加:
set smtp=smtps://smtp.gmail.com:465
set smtp-auth=login
set [email protected](自己的郵箱)
set smtp-auth-password=123132(應用專用密碼)
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
3、驗證發送郵件:echo "測試測試測試測試測試測試" | mail -v -s "測試測試測試測試" [email protected]