在Unity中实现无需登录邮箱发送邮件功能
发送邮件需要提供发送所使用的邮箱,以QQ邮箱为例
本文已详细介绍操作流程,按步骤进行即可
点击下载:邮件发送工程文件
一、前提
- 登录QQ邮箱,开通SMTP服务
- 得到SMTP授权码
- 封装函数,发送邮件
二、注意事项
- 发送邮件的时候,如果附件文件太大,可能会影响发送效率,甚至会导致发送失败
三、开通邮箱SMTP服务
-
登录(QQ)邮箱
-
找到设置,点击进入
-
在设置中选择账户
-
往下拉,找到 POP3/SMTP,点击开启(若已经开启了,可以直接点击生成授权码)
-
通过密保手机,发送短信验证
-
之后会生成一个授权码,同时SMTP服务已开启
注意:
授权码只会出现一次,请妥善保管
可以拥有多个授权码
四、上代码
- 核心代码(根据所需修改)
- 可以添加bool类型变量封装是否发送附件功能
- 可以添加收件人参数,指定不同收件人
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//参数:主题、内容、附件地址
SendEmail("邮件主题","邮件内容", "C:\\Users\\19805\\Desktop\\CSDN\\Email\\1.png");
}
// 发送邮件
void SendEmail(string subject,string contect,string path)
{
// 新建一个发件体
EmailFormat emailFormat = new EmailFormat();
// 邮件账户和授权码,授权平台,端口(可不要)
//QQ_发送账户
emailFormat.From = "[email protected]";
//QQ_授权码
emailFormat.AuthorizationCode = "sbyiyefqxngibcfd";
//QQ_授权平台
emailFormat.SmtpClient = "smtp.qq.com";
// 邮件主题和内容
emailFormat.Subject = subject;
emailFormat.Body = contect;
// 添加附件,可多个
// 附件不建议发送视频,太大影响发送效率,可能会发送失败
emailFormat.Attachments.Add(path);
// 添加收件人,可多个
emailFormat.To.Add("[email protected]");
// 发送邮件
SendEmailWrapper.SendEmail(emailFormat);
}
}
- 封装函数(直接复制即可)
using System.Collections.Generic;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using UnityEngine;
public class SendEmailWrapper
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="emailFormat">邮件的格式化内容</param>
/// <returns>true 发送成功</returns>
public static bool SendEmail(EmailFormat emailFormat)
{
if (emailFormat == null)
{
Debug.LogError("EmailFormat 不能为空 ");
return false;
}
if (emailFormat.To.Count == 0 || emailFormat.To == null)
{
Debug.LogError("EmailFormat 收件人不能为空 ");
return false;
}
// 创建邮件信息,设置发件人
MailMessage mail = new MailMessage();
mail.From = new MailAddress(emailFormat.From);
// 添加收件方(可以是列表)
foreach (string item in emailFormat.To)
{
mail.To.Add(item);
}
// 设置邮件主题和内容
mail.Subject = emailFormat.Subject;
mail.Body = emailFormat.Body;
// 设置邮件的附件(可以是多个)
if (emailFormat.Attachments != null && emailFormat.Attachments.Count > 0)
{
foreach (string item in emailFormat.Attachments)
{
mail.Attachments.Add(new Attachment(item));
}
}
// 绑定开通 Smtp 服务的邮箱 Credentials登陆SMTP服务器的身份验证
SmtpClient smtpClient = new SmtpClient(emailFormat.SmtpClient);
smtpClient.Credentials = new System.Net.NetworkCredential(emailFormat.From, emailFormat.AuthorizationCode) as System.Net.ICredentialsByHost;
smtpClient.EnableSsl = true;
// 设置相关回调
System.Net.ServicePointManager.ServerCertificateValidationCallback =
delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors
)
{
return true; };
// 发送邮件
smtpClient.Send(mail);
Debug.Log("邮件发送成功");
return true;
}
}
public class EmailFormat
{
// 账号
public string From {
get; set; }
// 开启 Smtp 的授权码
public string AuthorizationCode {
get; set; }
// 那个授权端 QQ,163,或者网易等等
public string SmtpClient {
get; set; }
// 端口(可要可不要)
public string Port {
get; set; }
// 邮件主题
public string Subject {
get; set; }
// 邮件内容
public string Body {
get; set; }
// 邮件附件
public List<string> Attachments {
get; set; }
// 收件人
public List<string> To {
get; set; }
public EmailFormat()
{
Attachments = new List<string>();
To = new List<string>();
}
}