Files
zszq-trs/Tools/YLMailTest/FormMail.cs
2024-05-09 14:06:26 +08:00

168 lines
5.1 KiB
C#

using System;
using System.Collections.Specialized;
using System.Windows.Forms;
using YLErp.MailKit;
namespace YLMailTest
{
public partial class FormMail : Form
{
public FormMail()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int port = 25;
var strPort = tbPort.Text.Trim();
if (!string.IsNullOrEmpty(tbPort.Text) && !int.TryParse(tbPort.Text, out port))
{
MessageBox.Show("解析端口失败:" + tbPort.Text);
return;
}
var smtpConfig = new SmtpConfig
{
EnableSsl = chkSSL.Checked,
From = tbFrom.Text.Trim(),
Password = tbPassword.Text,
Port = port,
Receipt = chkReceipt.Checked,
Server = tbServer.Text.Trim(),
UserName = tbUserName.Text.Trim(),
ZipAttach = false
};
var mailSubject = tbMailSubject.Text.Trim();
var mailBody = tbMailBody.Text.Trim();
MailSender.Send(smtpConfig, new MailSendingOption
{
MailTo = new[] { tbMailTo.Text.Trim() },
Subject = string.IsNullOrEmpty(mailSubject) ? "测试邮件发送" : mailSubject,
Body = string.IsNullOrEmpty(mailBody) ? "测试邮件发送" : mailBody,
IsBodyHtml = false,
FilesToAttach = null,
CC = null
});
MessageBox.Show("邮件发送成功");
}
catch (Exception ex)
{
MessageBox.Show("邮件发送失败:\r\n" + ex.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
var str = textBox1.Text;
if (string.IsNullOrWhiteSpace(str))
{
return;
}
SmtpConfig sc;
var index = str.IndexOf("[|]");
if (index > 0)
{
str = str.Substring(0, index);
}
var nv = UrlHelper.ParseQueryString(str, true);
chkSSL.Checked = nv[nameof(sc.EnableSsl)]?.ToLowerInvariant() == "true";
chkReceipt.Checked = nv[nameof(sc.Receipt)]?.ToLowerInvariant() == "true";
tbServer.Text = nv[nameof(sc.Server)];
tbPort.Text = nv[nameof(sc.Port)];
tbFrom.Text = nv[nameof(sc.From)];
tbUserName.Text = nv[nameof(sc.UserName)];
tbPassword.Text = nv[nameof(sc.Password)];
}
}
public static class UrlHelper
{
/// <summary>
/// 解析url查询字符串,支持&amp;&amp;转义为&amp;,所以和标准规范有出入
/// </summary>
public static NameValueCollection ParseQueryString(string query, bool urlencoded = false)
{
if (string.IsNullOrWhiteSpace(query))
{
return null;
}
var len = query.Length;
var buf = new char[len + 2];
query.CopyTo(0, buf, 0, len);
//在下面的循环中正好排除最后一个处理
buf[len++] = '&';
buf[len++] = 'm';
var startPos = 0;
var hasEscape = false;
var nv = new NameValueCollection(10);
for (var index = 0; index < len; index++)
{
if (buf[index] != '&')
{
continue;
}
if (!urlencoded && buf[index + 1] == '&')
{
index++;
hasEscape = true;
continue;
}
var index2 = startPos;
startPos = index + 1;
var substr = new string(buf, index2, index - index2).Trim();
if (substr.Length == 0)
{
continue;
}
if (hasEscape)
{
hasEscape = false;
substr = substr.Replace("&&", "&");
}
index2 = substr.IndexOf('=');
if (index2 > 0)
{
var key = substr.Substring(0, index2);
var value = substr.Substring(index2 + 1);
if (urlencoded)
{
key = Uri.UnescapeDataString(key);
value = Uri.UnescapeDataString(value);
}
nv.Add(key.Trim(), value.Trim());
}
else
{
var key = substr;
if (urlencoded)
{
key = Uri.UnescapeDataString(key);
}
nv.Add(key.Trim(), string.Empty);
}
}
return nv;
}
}
}