Java实现邮箱发送(阿里云邮箱推送)

Java mail邮箱发送

    • 1. 邮箱信息实体类
    • 2. jar包依赖
    • 3. 发送邮箱实现

绑定阿里云域名,创建域名账户,并配置解析域名账户,获得发送邮箱的权限,上限两百封,超出要¥…

  • 阿里云邮件推送控制台
  • https://www.aliyun.com/product/directmail
  • 申请邮箱并解析域名
  • https://yq.aliyun.com/articles/707997

1. 邮箱信息实体类

package cn.bitqian.mail.test;/*** 邮件内容实体类* @author echo lovely* @date 2020/9/18 15:47*/
public class MailInfo {// 发件人账户private String sendEmailAccount;// 发件人密码private String sendEmailPassword;// 收件人账户private String receiveMailAccount;// 发送人姓名private String sendPersonName;// 收件人姓名private String receivePersonName;// 邮件标题private String mailTitle;// 邮件正文private String mailContent;public MailInfo(String sendEmailAccount, String sendEmailPassword, String receiveMailAccount,String sendPersonName, String receivePersonName,String mailTitle, String mailContent) {this.sendEmailAccount = sendEmailAccount;this.sendEmailPassword = sendEmailPassword;this.receiveMailAccount = receiveMailAccount;this.sendPersonName = sendPersonName;this.receivePersonName = receivePersonName;this.mailTitle = mailTitle;this.mailContent = mailContent;}public String getSendEmailAccount() {return sendEmailAccount;}public void setSendEmailAccount(String sendEmailAccount) {this.sendEmailAccount = sendEmailAccount;}public String getSendEmailPassword() {return sendEmailPassword;}public void setSendEmailPassword(String sendEmailPassword) {this.sendEmailPassword = sendEmailPassword;}public String getReceiveMailAccount() {return receiveMailAccount;}public void setReceiveMailAccount(String receiveMailAccount) {this.receiveMailAccount = receiveMailAccount;}public String getMailTitle() {return mailTitle;}public void setMailTitle(String mailTitle) {this.mailTitle = mailTitle;}public String getMailContent() {return mailContent;}public void setMailContent(String mailContent) {this.mailContent = mailContent;}public String getSendPersonName() {return sendPersonName;}public void setSendPersonName(String sendPersonName) {this.sendPersonName = sendPersonName;}public String getReceivePersonName() {return receivePersonName;}public void setReceivePersonName(String receivePersonName) {this.receivePersonName = receivePersonName;}
}

2. jar包依赖

 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- mail dependency --><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version></dependency>

3. 发送邮箱实现

注意:1. 更改下面的属性,与实体类对应

在这里插入图片描述
代码实现

package cn.bitqian.mail.test;import org.junit.Test;import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;/*** 邮件发送工具类* @author echo lovely* @date 2020/9/18 15:54*/
public class MailSendUtils {// 邮箱smtp协议 这里是使用阿里云的public static final String myEmailSMTPHost = "smtpdm.aliyun.com";@Testpublic void test() {MailInfo mailInfo = new MailInfo("控制台所绑定的邮箱账户名","绑定账户邮箱密码","收件人邮箱名", "发件人姓名","收件人姓名", "邮箱标题", "邮箱内容");try {sendEmail(mailInfo);} catch (Exception e) {e.printStackTrace();}}public void sendEmail(MailInfo mailInfo) throws Exception {// 1. 创建参数配置, 用于连接邮件服务器的参数配置Properties props = new Properties();                    // 参数配置props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true");            // 需要请求认证// 2. 根据配置创建会话对象, 用于和邮件服务器交互Session session = Session.getInstance(props);session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log// 3. 创建一封邮件MimeMessage message = new MailSendUtils().createMimeMessage(session, mailInfo);// 4. 根据 Session 获取邮件传输对象Transport transport = session.getTransport();// 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错transport.connect(mailInfo.getSendEmailAccount(), mailInfo.getSendEmailPassword());// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 7. 关闭连接transport.close();}public MimeMessage createMimeMessage(Session session, MailInfo mailInfo) throws Exception {// 1. 创建一封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)message.setFrom(new InternetAddress(mailInfo.getSendEmailAccount(), mailInfo.getSendPersonName(), "UTF-8"));// 3. To: 收件人(可以增加多个收件人、抄送、密送)message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(mailInfo.getReceiveMailAccount(), mailInfo.getReceivePersonName(), "UTF-8"));// 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)message.setSubject(mailInfo.getMailTitle(), "UTF-8");// 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)message.setContent(mailInfo.getMailContent(), "text/html;charset=UTF-8");// 6. 设置发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();return message;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android组件系列----BroadcastReceiver广播接收器

​【声明】 欢迎转载&#xff0c;但请保留文章原始出处→_→ 生命壹号&#xff1a;http://www.cnblogs.com/smyhvae/ 文章来源&#xff1a;http://www.cnblogs.com/smyhvae/p/3960623.html 【正文】 一、广播的功能和特征 广播的生命周期很短&#xff0c;经过调用对象-->…

vue.js 入门,简介

vue的源代码下载——开发版本和生产版本 https://cn.vuejs.org/js/vue.jshttps://cn.vuejs.org/js/vue.min.js vue中文学习官网 https://cn.vuejs.org/v2/guide/ vue学习入门1. 什么是vue.js2. vue的要学的核心3. 我的第一个vue程序(&#xffe3;▽&#xffe3;)"1. 什么…

项目开发--高级功能汇总

祭奠曾经逝去的青春…… 1.高级功能汇总-->Memcached之ASP.NET实现 2.高级功能汇总-->HubbleDotNet软件安装转载于:https://www.cnblogs.com/dmeiyang002/p/3961520.html

vue中的数据单向绑定,判断,循环,函数

vue基本语法1. 前言2. 数据绑定v-bind3. v-if || v-else-if || v-else 条件判断4. v-for 循环5. v-on 元素监听事件1. 前言 vue语法&#xff0c;基本照着官网的来的&#xff0c;也有一些看了b站某kuang的视频&#xff0c;受了些启发。 <div id"app">// 取dat…

Asp.Net MVC4入门指南(5):从控制器访问数据模型

在本节中&#xff0c;您将创建一个新的MoviesController类&#xff0c;并在这个Controller类里编写代码来取得电影数据&#xff0c;并使用视图模板将数据展示在浏览器里。 在开始下一步前&#xff0c;先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 用鼠标右键单…

vue双向数据绑定v-model绑定单选框,复选框,下拉框

v-model使用1. 简单的demo2. 三种框的绑定注意它是自动帮你确认值的&#xff01;&#xff01;&#xff01;无需关心过程&#xff0c;把json数据一丢到data中&#xff0c;自动选中。1. 简单的demo 实现一边在输入框输入&#xff0c;一边显示输入框的内容 2. 三种框的绑定 &l…

WebApp基础01-设置读取assets目录下文件

要读取assets下的目录&#xff0c;只需要修改三个地方即可 1.res/layout/activity_main.xml 2.AndroidManifest.xml 3.src\com\example\lcy\MainActivity.java 第一步.res/layout/activity_main.xml加入代码,需要在xml布局文件中声明WebView组件 <WebView android:id"i…

vue借助axios实现网络通信

vue的好处之一&#xff0c;只关注视图层。对于通信&#xff0c;可以在vue实例对象创建前通过mounted钩子函数发送ajax请求&#xff0c;来拿到json数据。 发送请求通过axios&#xff0c;或者jQuery发送。 请求的数据在response对象里面。并绑定到vue对象data方法里。 1. 要访问…

vue自定义组件,插槽,自定义事件

vue组件套娃1. vue自定义组件2. 组件和插槽套娃3. vue组件通过自定义事件更改vue实例中的数据1. vue自定义组件 语法 Vue.component(自定义组件名, {props: [var1, var2, var3], //每个属性可以和页面绑定值template: <p>{{ var1 }}</p> // 自定义模板 里面套htm…

【编程题目】给你 10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数...

第 6 题&#xff08;数组&#xff09;腾讯面试题&#xff1a; 给你 10 分钟时间&#xff0c;根据上排给出十个数&#xff0c;在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下&#xff1a; 【0&#xff0c;1&#xff0c;2&…

vue脚手架v-cli,第一个vue程序

运行在node服务器上的vue程序1. v-cli安装2. 使用webpack构建vue程序3. 目录介绍4. webpack将vue打包成js文件1. v-cli安装 在玩v-cli vue客户端脚手架时&#xff0c;需要安装好node.js&#xff0c;是前端管理js包的工具正式安装vue-cli脚手架 1. npm install vue-cli -g 2. …

Shallow Copy Deep Copy in Python list

今天在写一个小程序的时候用到了2维数组, 顺手就写成了[[0.0]*length]*length, 结果为了这个小错,调试了半个多小时, 其实之前对与浅复制和深复制已经做过学习和总结, 但真正编程用到这些知识时还是掉入了陷阱中. 所以在此做进一步的总结: 本文通过几个实例来说明Python中list的…

python学习之wxPython

1、成功安装wxPython 2、第一个小图形化界面的小程序—创建并显示一个web小框架 参考http://www.cnblogs.com/fnng/archive/2013/05/23/3094033.html #! /usr/bin/env python#codingutf-8import wxappwx.App()winwx.Frame(None)win.Show()app.MainLoop() 3、运行报错 > &qu…

ssh框架搭建

下载地址&#xff1a;源码和详细搭建步骤 使用myeclipse2014搭建ssh框架1. spring搭建2. struts2搭建3. hibernate搭建4. applicationContext编写5. web.xml编写1. spring搭建 创建一个javaweb项目 导入spring框架 最高版本3.1支持 4. 选择类库 spring导入完毕 2. str…

iOS: 图解Xcode常用的快捷键

对于习惯了Windows 操作的开发者来说&#xff0c; 初次接触Xcode时&#xff0c;你会感到有种种不适&#xff0c;其中一个重要的原因就是&#xff0c; 相比Windows X86 电脑&#xff0c; Mac 多出了两个物理键&#xff1a; Fn 和 Command。 尤其是 Command键&#xff0c;在 Ma…

vue参数传递

目标&#xff1a;纯前端vue实现页面跳转restful传值 目录1. 全局路由配置2. 如何传值3. 页面取值1. 全局路由配置 // 路由器主配置文件 import Vue from vue import VueRouter from vue-routerimport Main from ../views/main import Login from ../views/login// 导入用户模块…

adb——Android的ADB工具使用

一、定义与作用&#xff1a; ADB全称Android Debug Bridge, 就是起到调试桥的作用。是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备,默认情况下当我们运行Eclipse时adb进程就会自动运行。当然我们也可以在外部使用本身自带的一些命…

beforeRouteEnter,beforeRouteLeave函数

操作&#xff1a; 是时机函数&#xff0c;在页面加载前&#xff0c;可以在这两个函数里面做一些事情&#xff0c; 比如发送异步请求。 类似过滤器&#xff0c;或者拦截器。1. axios安装 安装报错&#xff0c;多装几遍&#xff0c;或者用cnpm安装 npm install axios -s npm in…

排错“未能封送类型,因为嵌入数组实例的长度与布局中声明的长度不匹配”...

问题&#xff1a;在C#给C传数组类型数据时报此错&#xff0c;相应英文信息为“Type could not be marshaled, because the length of an embed array doesnt not match the declared length in the layout” 原因1、声明的数组长度和实际的数组长度不一致&#xff0c;比如声明的…