JAVA--发送Google邮件

文章目录

  • 1、介绍
  • 2、邮箱配置
    • 1、直接使用应用专用密码: 先开启两步验证, 在配置应用专用密码.
    • 2、启用邮箱POP
  • 2、代码
  • 3、注意点
  • 4、服务器发送邮件


1、介绍

网上的Google邮件发送也有很多, 这里也只是把我自己碰到的一些问题给记录一下

2、邮箱配置

1、直接使用应用专用密码: 先开启两步验证, 在配置应用专用密码.

JAVA--发送Google邮件_第1张图片

2、启用邮箱POP

2、代码

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("

亲爱的用户:

"
+ "

    您好! 您正在进行重置密码操作, 本次生成的密码为:

"
+ "

    \u200B" + 1234 + " (为了保障您帐号的安全性,请尽快修改密码)

"
+ "


该邮件为系统自动发送, 请勿进行回复!

"
+ "


"
, "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、因为我们做的是多商户, 当时发件人一直切换不成功, 最后发现用错了方法. Session.getInstance
2、应用专用密码, 避免Google的安全检查
3、如果不开启两步验证, 需要做如下操作:
开启安全性较低的应用的访问权限: https://myaccount.google.com/lesssecureapps
JAVA--发送Google邮件_第2张图片
允许安全性较低的应用的访问权限: https://accounts.google.com/DisplayUnlockCaptcha
JAVA--发送Google邮件_第3张图片

4、服务器发送邮件

1、安装mailx:yum install -y mailx
2、编辑配置文件:vim /etc/mail.rc
在最后面添加:
set smtp=smtps://smtp.gmail.com:465
set smtp-auth=login
set smtp-auth-user=cm646236438@gmail.com(自己的邮箱)
set smtp-auth-password=123132(应用专用密码)
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
3、验证发送邮件:echo "测试测试测试测试测试测试" | mail -v -s "测试测试测试测试" 646236438@qq.com

你可能感兴趣的:(java,Java,邮箱,Google邮箱,发送邮件)