AIDE教程-Android使用SMTP发送邮件

前言

市场上大部分APP都有用户反馈功能,用户反馈在用户体验设计里是一个低频但非常重要的功能。用户在使用产品的过程中遇到了bug,需要解决这个bug,用户反馈功能就是为了解决这个bug而设计。

本文给大家介绍一下使用SMTP发送邮件来实现用户反馈功能。

注:本教程仅供学习交流,请勿用于非法用途,否则造成的一切后果由使用者自行承担,作者不承担任何法律责任

SMTP介绍

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

开启SMTP服务

在QQ邮箱里的 设置->账户里开启POP3/SMTP服务

注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码。

使用方式

1.引入依赖库

implementation 'com.sun.mail:android-mail:1.6.4'
implementation 'com.sun.mail:android-activation:1.6.4'

2.创建邮箱工具类

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailUtil {
	/**
	 * 创建一封只包含文本的简单邮件
	 *
	 * @param session 和服务器交互的会话
	 * @param sendMail 发件人邮箱
	 * @param receiveMail 收件人邮箱
	 * @return
	 * @throws Exception
	 */
	public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
		//创建一封邮件
		MimeMessage message = new MimeMessage(session);
		//发件人
		message.setFrom(new InternetAddress(sendMail, "梦雪", "UTF-8"));
		//收件人(可以增加多个收件人、抄送、密送)
		message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail));
		//邮件主题
		message.setSubject("意见反馈", "UTF-8");
		//邮件正文(可以使用html标签)
		message.setContent("AIDE教程网反馈测试", "text/html;charset=UTF-8");
		//设置发件时间
		message.setSentDate(new Date());
		//保存设置
		message.saveChanges();
		return message;
	}
}

3.发送邮件

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MainActivity extends Activity {
	//发送邮件
    private Button sendEmail;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sendEmail = findViewById(R.id.activitymainButton1);
		sendEmail.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					new Thread(new Runnable() {
							@Override
							public void run() {
								try {
									sendMail();
								} catch (Exception e) {
									e.printStackTrace();
								}
							}
						}).start();
				}
			});
	}

	//发送邮件函数
	private void sendMail() throws Exception {
		//创建参数配置, 用于连接邮件服务器的参数配置
		Properties props = new Properties();
		//使用的协议(JavaMail规范要求)
		props.setProperty("mail.transport.protocol", "smtp");
		//SMTP服务器地址
		props.setProperty("mail.smtp.host", "smtp.qq.com");
		//需要请求认证
		props.setProperty("mail.smtp.auth", "true");
		//如果遇到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);*/
		//根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getDefaultInstance(props);
		//设置为debug模式, 可以查看详细的发送 log
		session.setDebug(true);
		//创建一封邮件
		MimeMessage message = MailUtil.createMimeMessage(session, "2487686673@qq.com", "2487686673@qq.com");
		//根据Session获取邮件传输对象
		Transport transport = session.getTransport();
		transport.connect("2487686673@qq.com", "QQ邮箱生成的授权码");
		//发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
		transport.sendMessage(message, message.getAllRecipients());
		//关闭连接
		transport.close();
	}
}

源码下载

https://www.aidemx.cn/908.html

版权声明:本文为AIDE教程网原创文章,转载请附上原文出处链接和本声明。
本文链接:https://www.aidemx.cn/892.html

梦雪

专注于AIDE教程分享

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐