热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SMTP发送邮件

7.1SMTPSMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访

7.1 SMTP

  SMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访问方式。

比如:



  • QQ邮箱:smtp.qq.com

  • 163邮箱:smtp.163.com

  通过地址和协议,我们便具有发送邮件的基础通道。使用Java或其他编程语言,可以使用SMTP完成邮件的发送,不必打开网页登录邮箱发送邮件了。



 

7.2 JavaMail邮件发送

  SMTP应用

  这一节我们将实现如何使用代码,利用自己的QQ邮箱发送邮件。在上一节中,我们大致了解的SMTP协议,在使用QQ邮箱发送邮件时,我们需要先进入QQ邮箱开启SMTP支持。

开启QQ邮箱设置:

1.打开QQ邮箱设置

2.在QQ邮箱头部找到邮箱设置,切换到账户下面,如图

技术分享图片

 

 3.往下边翻,开启和SMTP有关的服务。如图前两项

技术分享图片

 

 4.开启过程中可能会有各种验证,最终会得到授权码

技术分享图片

 

 注意:1.授权码没有空格,只是QQ邮箱为了分段显示而已。

            2.授权码不是邮箱的登录密码,不要混淆。

JavaMail

  在Java中我们可以调用JavaMail调用和接受邮件,我们首先配置maven依赖,如pom文件加入

<dependency>
<groupId>javax.mailgroupId>
<artifactId>mailartifactId>
<version>1.4version>
dependency>

然后 ,如下发送代码

import java.security.Security;
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;
public class MailClient {
public static void main(String[] args) {
try {
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
//配置邮箱信息
Properties props = System.getProperties();
//邮件服务器
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty(
"mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty(
"mail.smtp.socketFactory.fallback", "false");
//邮件服务器端口
props.setProperty("mail.smtp.port", "465");
props.setProperty(
"mail.smtp.socketFactory.port", "465");
//鉴权信息
props.setProperty("mail.smtp.auth", "true");
//建立邮件会话
Session session = Session.getDefaultInstance(props, new Authenticator() {
//身份认证
protected PasswordAuthentication getPasswordAuthentication() {
//1.账户 授权码
return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx");
}
});
//建立邮件对象
MimeMessage message = new MimeMessage(session);
//设置邮件的发件人
message.setFrom(new InternetAddress("xxxxxxx@qq.com"));
//2.设置邮件的收件人
message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com");
//设置邮件的主题
message.setSubject("通过javamail发出!!!");
//文本部分
message.setContent("文本邮件测试", "text/html;charset=UTF-8");
message.saveChanges();
//发送邮件
Transport.send(message);
}
catch (Exception e) {
e.printStackTrace();
}
}
}

 例:用自己的QQ邮箱给自己发一封邮件,注意一下约定条件

1.设置邮件主题为:HELLO

2.设置邮件主题内容是:HELLOWORLD

3.发送邮件完成后,在console打印:“Send complete”信息

 

先在pom.xml文件中添加依赖库。

然后完成Mail类


1 package com.youkeda.email;
2 import java.security.Security;
3 import java.util.Properties;
4 import javax.mail.Authenticator;
5 import javax.mail.Message;
6 import javax.mail.PasswordAuthentication;
7 import javax.mail.Session;
8 import javax.mail.Transport;
9 import javax.mail.internet.InternetAddress;
10 import javax.mail.internet.MimeMessage;
11
12 public class Mail {
13 public static void main(String[] args) {
14 try {
15 final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
16
17 //配置邮箱信息
18 Properties props = System.getProperties();
19 //邮件服务器
20 props.setProperty("mail.smtp.host", "smtp.qq.com");
21 props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
22 props.setProperty("mail.smtp.socketFactory.fallback", "false");
23 //邮件服务器端口
24 props.setProperty("mail.smtp.port", "465");
25 props.setProperty("mail.smtp.socketFactory.port", "465");
26 //鉴权信息
27 props.setProperty("mail.smtp.auth", "true");
28 //建立邮件会话
29 Session session = Session.getDefaultInstance(props, new Authenticator() {
30 //身份认证
31 protected PasswordAuthentication getPasswordAuthentication() {
32 //1.账户 授权码
33 return new PasswordAuthentication("1026509698@qq.com", "rdzdvorugfsxbebe");
34 }
35 });
36 //建立邮件对象
37 MimeMessage message = new MimeMessage(session);
38 //设置邮件的发件人
39 message.setFrom(new InternetAddress("1026509698@qq.com"));
40 //2.设置邮件的收件人
41 message.setRecipients(Message.RecipientType.TO, "1026509698@qq.com");
42 //设置邮件的主题
43 message.setSubject("HELLO");
44 //文本部分
45 message.setContent("HELLOWORLD", "text/html;charset=UTF-8");
46 message.saveChanges();
47 //发送邮件
48 Transport.send(message);
49 System.out.println("Send complete");
50 } catch (Exception e) {
51 e.printStackTrace();
52 }
53 }
54 }

不一会儿,就收到了自己发来的邮件,感觉不错。


推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
author-avatar
拍友2502926823
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有