JavaMail实践--实现邮件发送

一、介绍

  1、主要功能:

    实现普通邮件的发送

    实现带有HTML标签的内容发送

    实现带有附件的邮件发送

  2、API

  3、QQ邮箱的认证

    这里使用的邮件主机是:smtp.qq.com

    需要获得QQ邮箱的授权码:需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务

二、源码分享

import java.util.Properties;
import java.util.Scanner;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;

public class EMailDemo {

    public static void main(String[] args) {
        // EMailDemo.sendEmail();
        // EMailDemo.sendHtml(EMailDemo.getSession());
        EMailDemo.sendWithFile(getSession());
    }

    private static String to = null;
    private static String from = null;
    private static Scanner sc = new Scanner(System.in);

    private static Session getSession() {
        System.out.println("请输入收件人邮箱(任意):");
        String to = sc.nextLine();// 收件人
        System.out.println("请输入发件人邮箱(QQ):");
        String from = sc.nextLine();// 发件人
        System.out.println("请输入发件人邮箱的授权码:");
        String pop3 = sc.nextLine();// 发件人
        String host = "smtp.qq.com";// 指定发送邮件的QQ主机
        Properties properties = System.getProperties(); // 获取系统属性
        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, pop3); // 发件人邮件用户名、授权码
            }
        });
        return session;
    }

    public static void sendEmail(Session session) {
        try {
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);
            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));
            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // Set Subject: 头部头字段
            System.out.println("请设置邮件标题:");
            message.setSubject(sc.nextLine());
            // 设置消息体
            System.out.println("请设置邮件内容:");
            message.setText(sc.nextLine());
            // 发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

    public static void sendHtml(Session session) {
        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            System.out.println("请设置邮件标题:");
            message.setSubject(sc.nextLine());
            // 发送 HTML 消息, 可以插入html标签
            System.out.println("请设置邮件内容(可以插入html标签):");
            message.setContent(sc.nextLine(), "text/html");
            Transport.send(message);
            System.out.println("Sent message successfully....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

    public static void sendWithFile(Session session) {
        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            System.out.println("请设置邮件标题:");
            message.setSubject(sc.nextLine());

            // 创建消息部分
            BodyPart messageBodyPart = new MimeBodyPart();
            // 消息
            System.out.println("请设置邮件内容:");
            message.setText(sc.nextLine());
            // 创建多重消息
            Multipart multipart = new MimeMultipart();
            // 设置文本消息部分
            multipart.addBodyPart(messageBodyPart);
            // 附件部分
            messageBodyPart = new MimeBodyPart();
            System.out.println("请输入文件完整路径:");
            String filename = sc.nextLine();
            DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);
            multipart.addBodyPart(messageBodyPart);
            // 发送完整消息
            message.setContent(multipart);

            Transport.send(message);
            System.out.println("Sent message successfully....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/null-/p/10050612.html

时间: 2024-12-21 01:26:48

JavaMail实践--实现邮件发送的相关文章

java-基于JavaMail的Java邮件发送

1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

基于JavaMail的Java邮件发送:简单邮件发送

http://blog.csdn.net/xietansheng/article/details/51673073 http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html http://blog.csdn.net/ghsau/article/details/17839983 ******************** 电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信

JavaMail如何保证邮件发送成功

使用过JavaMail的api发送邮件的人可能会有这样一个疑惑:我如何知道我调用该api发送的邮件是否成功呢?一般的开放的api给我们调用都会有个返回值或者状态码,来告诉我们执行成功与否.但是JavaMail却没有提供这样一个返回值. 所以在调用JavaMail发送邮件的时候,我们只能通过catch异常的方式来判断邮件是否发送成功.我们认为只要没有异常发生,那么邮件就能发送成功.那么我们就来分析一下JavaMail为什么没有提供返回值,和通过异常判断邮件发送成功状态是否靠谱. JavaMail发

JavaMail技术实现邮件发送转【】

1 1.导入2个jar包,mail.jar,activation.jar 2 2.导入的jar包与myeclipse中自带的javaee 中的javaee.jar中的javax.activation包及javax.mail冲突, 3 解决办法如下: 4 在myeclipse中,点击window-preference-搜索框中输入lib,选中Library Sets,在右侧选择Javaee.jar-Add JAR/ZIP,然后选择用压缩程序打开,选择要移除的包,点击压缩程序上方的删除即可! 5 代

基于javaMail的邮件发送--excel作为附件

基于JavaMail的Java邮件发送 Author [email protected] Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用户发送邮件,然后我就简单学习了SMTP. 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP.其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议.SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件

javaMail操作QQ邮箱发送邮箱 Demo

最近用到想给项目中加一个功能,就是当项目中某些模块发生异常,在捕获异常后不仅仅写日志抛异常等!还要追加一个发送邮件给该模块的负责人,方便运维定位问题: maven管理的配置: <!-- 邮件 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </depe

SMTP协议及POP3协议-邮件发送和接收原理(转)

本文转自https://blog.csdn.net/qq_15646957/article/details/52544099 感谢作者 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu.163等等他们都有自己的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中. 电子邮箱(E

JavaMail 邮件发送之使用qq邮箱

所需jar包:comment-email.jar     mail.jaractivation.jar 一. 配置QQ邮箱的IMAP 进入qq电子邮件点击 设置->账户里开启 SMTP 服务(开启IMAP/SMTP服务)   注意:在启用QQ邮箱的14天之后才能开启此服务 开启之后会得到授权码,此授权码要记住或者保存到文本文件当中发送邮件的时候需要作为验证密码使用. 二.使用JavaMail发送一封简单邮件 的示例代码: public static void main(String[] args

邮件发送JavaMail的开发

一.邮件开发用到的协议:SMTP.POP.RFC822.MIME SMTP:Simle Message Transfer Protocal 简单消息传输协议.发送邮件时使用的协议.描述了数据该如何表示.默认使用的端口:25 POP:Post Office Protocal邮局协议.接收邮件时使用的协议.默认使用的端口:110 二.手工发送邮件和接收邮件(熟练SMTP等协议的) [email protected]          usst1 [email protected]