本文以腾讯企业邮箱为例,展示如何发送邮件 及相关问题  选择腾讯企业邮箱是因为腾讯企业邮箱一般都是开启了smtp服务

项目地址:https://gitee.com/bimingcong/MySendEmail

具体的smtp服务开启方式如下: 设置----》客户端设置----》记住红色框内的发送服务器地址smtp.exmail.qq.com 以及要用到的SSL端口号

首先用android系统发送邮件的话  需要用到针对android的邮件发送包 在此我们可以在Gradle

里边加入所需的依赖库 重点是红色部分的内容

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.bi.mysendemail"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
} repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
} dependencies {
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
}

添加完所需要的依赖库,

我们开始找发送邮件所需要的要素  然后新建一个发送邮件的类(包括邮件信息的生成以及连接邮件服务器)

  /**
* @param sendEmail 发送者的邮箱
* @param sendPass 发送者的邮箱密码
* @param senderName 发送者的昵称
* @param receiverEmail 接收者的邮箱
* @param receiverName 接受者的昵称
* @param ccEmail 抄送的邮箱
* @param ccName 抄送的昵称
* @param subject 邮件的主题
* @param content 邮件的内容
*/

新建一个发送类,并将对应的发送内容转为html的格式

private String preView(boolean isPreview) {
String preString="";
if(isPreview){
Date currentDate_temp=new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time_temp = format.format(currentDate_temp.getTime());//这个就是把时间戳经过处理得到期望格式的时间
preString="发件人:"+selfName +"<"+selfEmail+"><br><br>"+
"发送时间:"+time_temp+"<br><br>"+
"收件人:"+receiverName+"<"+receiverEmail+"><br><br>"+
"抄送:"+ccName+"<"+ccEmail+"><br><br>";
} Date currentDate=new Date();
SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM-dd");
String time = format0.format(currentDate.getTime());//这个就是把时间戳经过处理得到期望格式的时间 preString+= "【日报】 "+time+" "+selfName +"<br><br>" +
"■今日工作计划<br><br>";
if(firstContent.length()!=0){
preString+=" 1、"+ firstContent+"<br><br>" ;
}
if(secondContent.length()!=0){
preString+=" 2、"+ secondContent+"<br><br>" ;
}
if(thirdContent.length()!=0){
preString+=" 3、"+ thirdContent+"<br><br>" ;
} preString+= "■今日工作内容和实施状态<br><br>";
if(firstProcess.length()!=0){
preString+=" 1、"+ firstContent+"-------------------------- "+firstProcess +"%<br><br>" ;
}
if(secondProcess.length()!=0){
preString+=" 2、"+ secondContent+"-------------------------- "+secondProcess +"%<br><br>" ;
}
if(thirdProcess.length()!=0){
preString+=" 3、"+ thirdContent+"-------------------------- "+thirdProcess +"%<br><br>" ;
}
preString+= "■明日工作计划<br><br>" +
"■问题课题<br><br>" +
"■问题原因及对策"; return preString;
}
package com.bi.mysendemail;

import java.util.Date;
import java.util.Properties; import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; /**
* Created by bmc on 2018/6/22.
*/
public class SendEmail { // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com 腾讯企业邮箱是 smtp.exmail.qq.com
public static String myEmailSMTPHost = "smtp.exmail.qq.com"; /**
* @param sendEmail 发送者的邮箱
* @param sendPass 发送者的邮箱密码
* @param senderName 发送者的昵称
* @param receiverEmail 接收者的邮箱
* @param receiverName 接受者的昵称
* @param ccEmail 抄送的邮箱
* @param ccName 抄送的昵称
* @param subject 邮件的主题
* @param content 邮件的内容
*/
public void send(String sendEmail,String sendPass,String senderName,String receiverEmail,
String receiverName,String ccEmail,String ccName,String subject,String content) {
// 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"); // 需要请求认证 // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
// 打开 SSL 安全连接 final String smtpPort = "465";
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort); // 2. 根据配置创建会话对象, 用于和邮件服务器交互
Session session = Session.getInstance(props);
session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log MimeMessage message = null;
try {
message = createMimeMessage(session, sendEmail,senderName,receiverEmail,receiverName,ccEmail,ccName,subject,content); // 4. 根据 Session 获取邮件传输对象
Transport transport = null;
transport = session.getTransport(); // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
//
// PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
// 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
// 类型到对应邮件服务器的帮助网站上查看具体失败原因。
//
// PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
// (1) 邮箱没有开启 SMTP 服务;
// (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
// (3) 邮箱服务器要求必须要使用 SSL 安全连接;
// (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
// (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
//
// PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
transport.connect(sendEmail, sendPass); // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients()); // 7. 关闭连接
transport.close();
} catch (Exception e) {
e.printStackTrace();
} } /**
* 创建一封只包含文本的简单邮件
*
* @param session 和服务器交互的会话
* @param sendMail 发件人邮箱
* @param shortName 发件人的昵称
* @param receiveMail 收件人邮箱
* @param receiverName 收件人的昵称
* @param ccEmail 抄送邮箱
* @param ccName 抄送人昵称
* @param subject 邮件的主题
* @param content 邮件的内容
* @return
* @throws Exception
*/
public MimeMessage createMimeMessage(Session session, String sendMail,String shortName, String receiveMail,String receiverName,
String ccEmail,String ccName,String subject,String content) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session); // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
message.setFrom(new InternetAddress(sendMail, shortName, "UTF-8")); // 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, receiverName, "UTF-8")); //添加抄送者
message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(ccEmail, ccName, "UTF-8")); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
message.setSubject(subject, "UTF-8"); message.setContent(content, "text/html;charset=UTF-8"); // 6. 设置发件时间
message.setSentDate(new Date()); // 7. 保存设置
message.saveChanges(); return message;
} }

在Android系统中发送邮件是网络操作  属于耗时操作  所以我们发送的时候要在子线程中去发送

  @Override
public void onClick(View v) {
switch (v.getId()){
//立即发送邮件
case R.id.btn_now_send:
getInfo();
new Thread(new Runnable() {
@Override
public void run() {
//自定义邮件的主题
Date currentDate=new Date();
SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM-dd");
String time = format0.format(currentDate.getTime());//这个就是把时间戳经过处理得到期望格式的时间 String subject_temp= "【日报】 "+time+" "+selfName;
sendEmail.send(selfEmail,selfPass,selfName,receiverEmail,receiverName,ccEmail,ccName,subject_temp,preView(false));
}
}).start(); break; case R.id.btn_time_send: break; } } public void getInfo(){
selfEmail=et_selfEmail.getText().toString();
selfName=et_selfName.getText().toString();
selfPass=et_selfPass.getText().toString();
receiverName=et_receiverName.getText().toString();
receiverEmail=et_receiverEmail.getText().toString();
ccEmail=et_ccEmail.getText().toString();
ccName=et_ccName.getText().toString();
subject=et_subject.getText().toString();
firstContent=et_firstContent.getText().toString();
firstProcess=et_firstProcess.getText().toString();
secondContent=et_secondContent.getText().toString();
secondProcess=et_secondProcess.getText().toString();
thirdContent=et_thirdContent.getText().toString();
thirdProcess=et_thirdProcess.getText().toString();
}

如此,填上对应的参数就可以实现邮件的发送,打开目标邮箱就可以看到效果

        

当我们需要定时发送邮件的时候可以后台启动一个服务在服务里边开一个定时器,实现定时发送邮件

针对服务可以开启两个服务,故障检测对方是否存活,如果不存活,另一个去重新救活,提高服务的存活率

项目地址:https://gitee.com/bimingcong/MySendEmail

        严禁盗版    

   转载请注明出处:https://www.cnblogs.com/bimingcong/p/9215398.html

Android 发送邮件以及定时发送邮件的实现的更多相关文章

  1. VBS实现定时发送邮件

    原理:建立CDO.Message对象,设置好参数后直接Send就可以了 代码如下: NameSpace = "http://schemas.microsoft.com/cdo/configu ...

  2. python (18)在linux中如何实现定时发送邮件

    最近要用到,定时发送邮件功能: 如何定时,当然要用到linux中crontab了 如下的代码能够定时发送邮件 #!/usr/bin/env python # -*- coding=utf-8 -*- ...

  3. Android 使用 Gmail 来发送邮件

    Android 使用 Gmail 来发送邮件 1. [代码]SendMail.java package org.apache.android.mail; import android.app.Acti ...

  4. spring利用javamail,quartz定时发送邮件 <转>

    原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...

  5. java实现qq邮箱每天定时发送邮件

    本周四的时候去学校的某机构值班,主要工作是帮老师送文件,干一些杂活.那天没有什么活儿,于是想起用Java实现发送邮件和接收邮件的功能.前几天接触过一点quartz框架,用来实现定时开始任务的功能.于是 ...

  6. odoo定时发送邮件

    采购订单延迟或者存在部分到货的情况,定时发送邮件给相关人员 包含,采购订单明细,订单数量,已到货数量,未到货数量 <?xml version="1.0" encoding=& ...

  7. python3 通过qq邮箱定时发送邮件

    下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...

  8. asp.net基于windows服务实现定时发送邮件的方法

    本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法.分享给大家供大家参考,具体如下: //定义组件 private System.Timers.Timer time; publi ...

  9. python (18)在linux中如何实现定时发送邮件到指定邮箱,监测任务

    最近要用到,定时发送邮件功能: 如何定时,当然要用到linux中crontab了 如下的代码能够定时发送邮件 #!/usr/bin/env python # -*- coding=utf-8 -*- ...

随机推荐

  1. 前段开发神奇webstorm安装注册和汉化

    软件下载地址: http://www.jetbrains.com/webstorm/ 安装完后退出. 重新打开,进行激活 这里我们选择“license server”然后输入:http://idea. ...

  2. read()、write()返回 Input/output error, Device or resource busy解决

    遇到的问题,通过I2C总线读.写(read.write)fs8816加密芯片,报错如下: read str failed,error= Input/output error! write str fa ...

  3. Spring复习

    第一天 IOC:控制反转,对象的创建权交给Spring DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来. 包括集合的注入 ClassPathXml ...

  4. 饥饿的牛(dp一维最大覆盖)

    问题 H: 饥饿的牛 时间限制: 1 Sec  内存限制: 128 MB提交: 12  解决: 12[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目 ...

  5. Scrapy学习篇(十一)之设置随机User-Agent

    大多数情况下,网站都会根据我们的请求头信息来区分你是不是一个爬虫程序,如果一旦识别出这是一个爬虫程序,很容易就会拒绝我们的请求,因此我们需要给我们的爬虫手动添加请求头信息,来模拟浏览器的行为,但是当我 ...

  6. Java笔记Spring(三)

    spring-beans和spring-context 一.注解 1.自定义一个注解 @Target({ElementType.METHOD}) @Retention(RetentionPolicy. ...

  7. Android Studio 制作一个循环播报的效果

    这个就是用到了一个TextView 控件,直接上代码. <TextView android:id="@+id/tv_7" android:layout_width=" ...

  8. PyQt5 入门

    换了VSCODE开发,感觉比sublime好点,可能是由于第三版老弹框烦人吧.VSCODE看着也挺好看的. 学习 PyQt5 中文教程 0. 安装完之后错误 pip 安装了 pyqt5 from Py ...

  9. Entity Frame Code First 简易教程

    简介 什么是ORM 搭建Entity FrameWork CodeFirst应用 数据库迁移 表属性常见配置 Entity FrameWork 一对多.多对多 一.简介 Entity Framewor ...

  10. centos密码策略

    centos7密码策略 https://blog.csdn.net/qq_36896749/article/details/80264280 centos7设置密码规则 https://blog.cs ...