Heim >Java >javaLernprogramm >So senden Sie E-Mails mit Java

So senden Sie E-Mails mit Java

WBOY
WBOYnach vorne
2023-04-20 11:19:141349Durchsuche

Schauen wir uns zunächst die Implementierungsschritte an und sprechen dann über die Probleme, auf die Sie möglicherweise stoßen

1. Führen Sie die Abhängigkeit von javax.mail ein. Ich verwende Springboot, daher wird die Abhängigkeit wie folgt eingeführt

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Wenn Sie das Springboot-Framework nicht verwenden, können Sie es selbst finden

2. Erstellen Sie einen grundlegenden E-Mail-Informationskurs

package com.example.demo.comment.sendemail;

import java.util.Properties;

/**
 * 发送邮件需要使用的基本信息
 *
 * @author 860118060
 */
public class MailSenderInfo {
    /**
     * 发送邮件的服务器的IP和端口
     */
    private String mailServerHost;
    private String mailServerPort = "25";
    /**
     * 邮件发送者的地址
     */
    private String fromAddress;
    /**
     * 邮件接收者的地址
     */
    private String toAddress;
    /**
     * 登陆邮件发送服务器的用户名和密码
     */
    private String userName;
    private String password;
    /**
     * 是否需要身份验证
     */
    private boolean validate = false;
    /**
     * 邮件主题
     */
    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);
        p.put("mail.smtp.auth", validate ? "true" : "false");
        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. Erstellen Sie den E-Mail-Absender

package com.example.demo.comment.sendemail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 简单邮件(不带附件的邮件)发送器
 */
public class SimpleMailSender  {
    /**
     * 以文本格式发送邮件
     * @param mailInfo 待发送的邮件的信息
     */
    public static 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);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    /**
     * 以HTML格式发送邮件
     * @param mailInfo 待发送的邮件信息
     */
    public static boolean sendHtmlMail(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());
            // Message.RecipientType.TO属性表示接收者的类型为TO
            mailMessage.setRecipient(Message.RecipientType.TO,to);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}

4. Erstellen Sie einen Passwortvalidator

package com.example.demo.comment.sendemail;
import javax.mail.*;

/**
 * @author 860118060
 */
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;
    }

    @Override
    protected PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(userName, password);
    }
}

Nachdem die Vorbereitungsarbeiten nun abgeschlossen sind, werfen wir einen Blick darauf, wie man es nennt

5. Demo anrufen

package com.example.demo.comment.sendemail;

public class SendEmailDemo {
    public static void main(String[] args){
        //这个类主要是设置邮件
        MailSenderInfo mailInfo = new MailSenderInfo();
        mailInfo.setMailServerHost("smtp.163.com");
        mailInfo.setMailServerPort("25");
        mailInfo.setValidate(true);
        // 发送方邮箱
        mailInfo.setUserName("xxxxxxxx@163.com");
        // 发送方邮箱密码
        mailInfo.setPassword("xxxxxxxx");
        // 发送方邮箱
        mailInfo.setFromAddress("xxxxxxxx@163.com");
        // 接收方邮箱
        mailInfo.setToAddress("xxxxxxxx@qq.com");
        // 邮件标题
        mailInfo.setSubject("测试用邮箱发送邮件");
        // 邮件内容
        mailInfo.setContent("<h2>邮件内容非常丰富<h2>");

        //发送文体格式
        SimpleMailSender.sendTextMail(mailInfo);
        //发送html格式
        SimpleMailSender.sendHtmlMail(mailInfo);
    }
}

Hier sind zwei E-Mail-Versandformate

So senden Sie E-Mails mit Java

So senden Sie E-Mails mit Java

Fragen und Zusammenfassung

Wenn sonst nichts schief geht, sollten die beiden E-Mails erfolgreich versendet worden sein. Lassen Sie uns jedoch analysieren, welche Probleme zum Scheitern führen werden.

1.mailInfo.setMailServerHost("smtp.163.com"); und mailInfo.setFromAddress("xxxxxxxx@163.com");. Das heißt, wenn Sie den 163SMTP-Server verwenden, muss die E-Mail-Adresse ein 163-Postfach sein. Andernfalls wird die E-Mail nicht erfolgreich gesendet.

2. Verwenden Sie nicht die E-Mail-Adresse, die Sie gerade registriert haben, um E-Mails im Programm zu senden. Wenn Ihre 163-E-Mail-Adresse gerade registriert wurde, sollten Sie nicht „smtp.163.com“ verwenden. Weil man es nicht verschicken kann. Die E-Mail-Adresse, mit der Sie sich gerade registriert haben, erteilt Ihnen diese Art der Berechtigung nicht, was bedeutet, dass Sie die Verifizierung nicht bestehen können. Verwenden Sie die E-Mail-Adresse, die Sie häufig verwenden, und die, die Sie schon lange verwenden

3. QQ-Postfach, da der Absender möglicherweise eine Autorisierungsüberprüfung erfordert.

Die Autorisierung lautet wie folgt:
Suchen Sie das Konto in den Einstellungen, scrollen Sie nach unten, um die Anweisungen zum Aktivieren der Autorisierung zu finden und zu befolgen, und verwenden Sie dann den erhaltenen Autorisierungscode als Ihr E-Mail-Passwort, um die E-Mail erfolgreich zu versenden
So senden Sie E-Mails mit Java

So senden Sie E-Mails mit Java

Bitte fügen Sie abschließend Ihre häufig verwendete E-Mail-Adresse bei:

Häufig verwendete E-Mail-Serveradressen (SMTP, POP3) und Ports

sina.com:
POP3-Serveradresse: pop3.sina.com.cn (Port: 110) SMTP-Serveradresse: smtp.sina.com.cn (Port: 25)
sinaVIP:
POP3-Server: pop3.vip.sina.com (Port: 110) SMTP-Server: smtp.vip.sina.com (Port: 25)
sohu.com:
POP3-Serveradresse: pop3.sohu.com (Port: 110) SMTP-Serveradresse: smtp.sohu.com (Port: 25)
126 E-Mail:
POP3-Serveradresse: pop.126.com (Port: 110) SMTP-Serveradresse: smtp.126.com (Port: 25)
139 E-Mail:
POP3-Serveradresse: POP.139.com (Port: 110) SMTP-Serveradresse: SMTP.139.com (Port: 25)
163.com:
POP3-Serveradresse: pop.163.com (Port: 110) SMTP-Serveradresse: smtp.163.com (Port: 25)
QQ-Postfach
POP3-Serveradresse: pop.qq.com (Port: 110)
SMTP-Serveradresse: smtp.qq.com (Port: 25)
QQ-Geschäfts-E-Mail
POP3-Serveradresse: pop.exmail.qq.com (SSL-aktivierter Port: 995) SMTP-Serveradresse: smtp.exmail.qq.com (SSL-aktivierter Port: 587/465)
yahoo.com:
POP3-Serveradresse: pop.mail.yahoo.com SMTP-Serveradresse: smtp.mail.yahoo.com
yahoo.com.cn:
POP3-Serveradresse: pop.mail.yahoo.com.cn (Port: 995) SMTP-Serveradresse: smtp.mail.yahoo.com.cn (Port: 587

HotMail
POP3-Serveradresse: pop3.live.com (Port: 995) SMTP-Serveradresse: smtp.live.com (Port: 587)
gmail(google.com)
POP3-Serveradresse: pop.gmail.com (SSL aktiviert, Port: 995) SMTP-Serveradresse: smtp.gmail.com (SSL aktiviert, Port: 587)
263.net:
POP3-Serveradresse: pop3.263.net (Port: 110) SMTP-Serveradresse: smtp.263.net (Port: 25)
263.net.cn:
POP3-Serveradresse: pop.263.net.cn (Port: 110) SMTP-Serveradresse: smtp.263.net.cn (Port: 25)
x263.net:
POP3-Serveradresse: pop.x263.net (Port: 110) SMTP-Serveradresse: smtp.x263.net (Port: 25)
21cn.com:
POP3-Serveradresse: pop.21cn.com (Port: 110) SMTP-Serveradresse: smtp.21cn.com (Port: 25)
Foxmail:
POP3-Serveradresse: POP.foxmail.com (Port: 110) SMTP-Serveradresse: SMTP.foxmail.com (Port: 25)
china.com:
POP3-Serveradresse: pop.china.com (Port: 110) SMTP-Serveradresse: smtp.china.com (Port: 25)
tom.com:
POP3-Serveradresse: pop.tom.com (Port: 110) SMTP-Serveradresse: smtp.tom.com (Port: 25)
etang.com:
POP3-Serveradresse: pop.etang.com SMTP-Serveradresse: smtp.etang.com

Das obige ist der detaillierte Inhalt vonSo senden Sie E-Mails mit Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen