Java发送QQ邮件

面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼。然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了。

首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议;

POP3

是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

登录网页版的邮箱,在设置-》账户中可开启这两项服务。需要用手机验证一下,然后要保存生成的授权码,这个授权码在代码中或者在第三方邮件管理软件要使用的。

然后就是所需要的jar包资源了,如果使用纯Java代码发送邮件则只需要两个jar包,这里有资源  http://www.runoob.com/java/java-sending-email.html

activation.jar

mail.jar

之后就可以使用代码发送邮件了,以下的代码介绍了发送简单的文本文件和html格式的邮件。

package qqmail.test;

import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 发送QQ邮件
 *
 * @author YaoQi
 * @date 2017年7月13日
 */
public class TestMail {

    public static void main(String[] args) {

        String from = "34845***@qq.com"; //发件人的邮箱地址
        String to = "16841***@qq.com";    //收件人的邮箱地址
        String subject = "mailTest";    //邮件主题
        String body = "邮件正文";    //邮件内容

        //设置发送邮件的一些属性
        Properties prop = new Properties();
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.host", "smtp.qq.com");
        prop.setProperty("mail.smtp.port", "465");
        prop.setProperty("mail.smtp.auth", "true");
        prop.setProperty("mail.debug", "true");
        prop.setProperty("mail.smtp.ssl.enable", "true"); //qq邮箱必须设置这一项,ssl加密选项

        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //这里需要验证邮箱的授权码,QQ邮箱需要授权码
                return new PasswordAuthentication(from, "rvrvrjloadxm****");
            }
        });

        MimeMessage message = new MimeMessage(session);
        try {
            Transport transport = session.getTransport();
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSentDate(new Date());
            message.setSubject(subject);
            //如果仅仅是发送文本,使用setText()方法
            message.setText(body);

            //如果是发送html格式的邮件则需要使用setContent()方法,并且设置参数text/html; 这两个方法是等价的,后面执行的会覆盖前一个方法设置的内容
            message.setContent("<h1>This is HTML message</h1>","text/html" );
            message.saveChanges();
            session.setDebug(true);
            transport.connect(from, "rvrvrjloadxm****");
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果要发送带附件的邮件,则需要添加多重消息,其余部分都一样,最后把消息组合成一个邮件。

try {
            Transport transport = session.getTransport();
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSentDate(new Date());
            message.setSubject(subject);

            // 创建消息体部分
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText("这是邮件正文");

            // 创建多重消息
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart); // 将消息体部分加入到多重消息中

            // 创建一个附件
            messageBodyPart = new MimeBodyPart();
            File file = new File("D:\\java\\workSpace\\SendMailDemo\\file.txt");
            DataSource source = new FileDataSource(file);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName("file");
            multipart.addBodyPart(messageBodyPart);

            message.setContent(multipart);
            message.saveChanges();
            session.setDebug(true);
            transport.connect(from, "rvrvrjloadxm****");
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
时间: 2024-10-27 14:10:48

Java发送QQ邮件的相关文章

Java发送QQ邮件-附jar包下载链接

Java发送QQ邮件 jar包链接 链接:https://pan.baidu.com/s/1mt7LsPVIuMl5HLXEOppWkQ 提取码:x4jf 示例代码: package java2; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * 测试发送邮件 */ p

java通过SMTP发送QQ邮件(参考自龙果学院)

java通过SMTP发送QQ邮件编辑 个人邮箱开通SMTP服务(进入个人邮箱,点击设置–>账户):  点击了账户后,往下拉可以看到SMTP服务选项,默认情况下这个选项是不开启的.点击开启腾讯会进行身份验证,身份验证通过以后,会收到一个用于使用SMTP的16位口令,验证身份的过程中把收到的口令保存下来,因为后面要使用SMTP功能必须要用到这个口令.  具体实现代码:     public static void main(String args[]) {        // 邮件内容       

java发送exchange邮件问题

最近工作中遇到一个问题,本来很简单的一个问题,困扰了我2周 具体:java发送会议邮件到exchange服务器 奇怪:系统有80多家客户,基本大半都有会议邮件的发送,不管是outlook,网易闪电邮,Foxmail另外wps邮箱都可以接收到会以邮件 只有exchange不能接收到会议邮件,收到的只是 BEGIN:VCALENDAR PRODID:-//Events Calendar//iCal4j 1.0//EN CALSCALE:GREGORIAN VERSION:2.0 METHOD:REQ

python脚本连续发送QQ邮件

今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首先,执行如下操作,__init__ 标志该文件夹是一个python程序包 $mkdir automail $cd automail $gedit qqmail $touch __init__ 打开 qqmail ,写入如下代码. 1 #-*- coding: utf -8 -*- 2 import

java spring 开启SMTP服务发送QQ邮件

首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部 点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 获取授权码 注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了 接下来的是Spring 中使用邮件服务 首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的 <!-- 邮件服务 --> <bean id="mailSender&q

使用python发送QQ邮件

这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText 对象,为底层的 MIME(Multipurpose Internet MailExtensions,多用途互联网邮件扩展类型)协议传输创建了一封空邮件,最后通过高层的SMTP 协议发送出去. MIMEText 对象 msg 包括收发邮箱地址.邮件正文和主题,Python 通过它就可以创建一封格式正

python 发送QQ邮件的小例子

首先QQ邮件用第三方客户端发送要申请验证码.而不是QQ的密码. 授权码就是你接下来登录要使用的密码 那么剩下的工作就很简单了.附简单代码如下: #coding:utf-8 import smtplib from email.mime.text import MIMEText _user = "[email protected]" _pwd = "12341234134" #用授权码 _to = "[email protected]" msg =

python 发送qq邮件

# coding=utf-8import smtplibfrom email.mime.text import MIMETextimport email def sen(file_new): msg_from = '[email protected]' # 发送方邮箱 passwd = 'xthwzlXXX' # 填入发送方邮箱的授权码 msg_to = '[email protected]' # 收件人邮箱 subject = "python邮件测试" # 主题 content =

使用selenium+selenium发送QQ邮件

参考 :    初识selenium-发送QQ邮件  链接------>https://blog.csdn.net/qiye005/article/details/80259607 前言: 为实现selenium+python自动发送QQ邮件功能,需要搭建的环境:安装selenium包(pip install selenium)及安装谷歌驱动器(http://chromedriver.storage.googleapis.com/index.html).并且要了解要selenium进行元素定位的