首页 > 编程语言 >C# 发送邮件

C# 发送邮件

时间:2022-09-20 21:01:00浏览次数:60  
标签:string C# 如下 发送 发件人 mailMsg new 邮件

一、首先,使用VisualStudio2019创建一个名为“SendMail”的WPF项目,并修改窗口名称。

1.打开App.xmal文件,如下图:

2.修改App.xmal文件中的启动项,如下图:

二、在项目中引入HandyControl的NuGet包。

1.在项目上单击右键,打开NuGet包,如下图:

2.在NuGet窗口中搜索HandyControl包,如下图:

3.在项目中引入HandyControl样式文件,如下图:

4.在项目中引入HandyControl扩展控件文件,如下图:

三、WPF窗口页面代码

1.WPF窗口,如下图:

2.WPF页面代码,如下图:

点击查看代码
<Window x:Class="SendMail.Views.SendMailWin"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        xmlns:local="clr-namespace:SendMail.Views"
        xmlns:Helpers="clr-namespace:SendMail.Events" 
        xmlns:viewmodels="clr-namespace:SendMail.ViewModels" 
        d:DataContext="{d:DesignInstance Type=viewmodels:SendMailVM}"
        mc:Ignorable="d" Icon="pack://application:,,,/Resources/Img/mailIcon.png"
        Title="发送邮件" Height="520" MinHeight="580" Width="500" MinWidth="500">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="0.15*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="0.15*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="0.2*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Content="发件人:" Style="{StaticResource LabelInfo}"/>
        <TextBox Text="{Binding MailFrom}" Grid.Column="1" Margin="5"/>
        <Label Content="密   码:" Style="{StaticResource LabelInfo}" Grid.Row="1"/>
        <TextBox Text="{Binding MailPwd}" Grid.Row="1" Grid.Column="1" Margin="5"/>
        <Label Content="收件人:" Style="{StaticResource LabelInfo}" Grid.Row="2"/>
        <TextBox Text="{Binding MailAddressee}" Grid.Row="2" Grid.Column="1" Margin="5" />
        <Label Content="抄送人:" Style="{StaticResource LabelInfo}" Grid.Row="3"/>
        <TextBox Text="{Binding MailCc}" Grid.Row="3" Grid.Column="1" Margin="5"/>
        <Label Content="附   件:" Style="{StaticResource LabelInfo}" Grid.Row="4"/>
        <TextBox Text="{Binding MailEnclosure}" Grid.Row="4" Grid.Column="1" Margin="5"/>
        <Label Content="主   题:" Style="{StaticResource LabelInfo}" Grid.Row="5"/>
        <TextBox Text="{Binding MailTheme}" Grid.Row="5" Grid.Column="1" Margin="5"/>
        <Label Content="正   文:" Style="{StaticResource LabelInfo}" Grid.Row="6"/>
        <TextBox Text="{Binding MailText}" TextWrapping="Wrap" Foreground="Gray" Grid.Row="6" Grid.Column="1" Margin="5"/>
        <Button Content="发   送" Command="{Binding MailSendCommand}" Style="{StaticResource ButtonPrimary}" Grid.Row="7" Grid.Column="1" HorizontalAlignment="Right" Margin="15 0"/>
    </Grid>
</Window>

四、WPF窗口后台代码

1.C#发送邮件核心代码,如下:

点击查看代码
 /// <summary>
/// 发送邮件
/// </summary>
/// <param name="mailFrom">发件人</param>
/// <param name="mailPwd">发件人密码</param>
/// <param name="mailAddressee">收件人</param>
/// <param name="mailCc">抄送人</param>
/// <param name="mailTheme">主题</param>
/// <param name="mailText">内容</param>
/// <param name="mailEnclosure">附件</param>
/// <param name="isTextHtml">HTML格式</param>
/// <param name="SMTPMailServer">SMTP服务器</param>
/// <returns></returns>
public static bool MailSend(string mailFrom, string mailPwd, string mailAddressee, string mailCc, string mailTheme, string mailText, string mailEnclosure, bool isTextHtml, string SMTPMailServer)
{
    //使用指定的邮件地址初始化MailAddress实例
    MailAddress mailAddress = new MailAddress(mailFrom);
    //初始化MailMessage实例
    MailMessage mailMsg = new MailMessage();

    //将收件人添加到邮件消息集合
    if (!string.IsNullOrWhiteSpace(mailAddressee))
    {
        string[] mailAddressees = mailAddressee.Split(';');
        if (mailAddressees.Length > 0)
        {
            for (int i = 0; i < mailAddressees.Length; i++)
            {
                mailMsg.To.Add(mailAddressees[i].ToString());
            }
        }
        else
        {
            Growl.Info("收件人之间请使用分号“;”进行分隔!");
        }
    }

    //将抄送人添加到邮件消息集合
    if (!string.IsNullOrWhiteSpace(mailCc))
    {
        string[] mailCcs = mailCc.Split(';');
        if (mailCcs.Length > 0)
        {
            for (int i = 0; i < mailCcs.Length; i++)
            {
                mailMsg.CC.Add(mailCcs[i].ToString());
            }
        }
        else
        {
            Growl.Info("抄送人之间请使用分号“;”进行分隔!");
        }
    }
    //发件人地址
    mailMsg.From = mailAddress;

    //电子邮件的标题
    mailMsg.Subject = mailTheme;

    //电子邮件的主题内容使用的编码
    mailMsg.SubjectEncoding = Encoding.UTF8;

    //电子邮件正文
    mailMsg.Body = mailText;

    //电子邮件正文的编码
    mailMsg.BodyEncoding = Encoding.Default;
    mailMsg.Priority = MailPriority.High;
    mailMsg.IsBodyHtml = isTextHtml;

    //在有附件的情况下添加附件
    try
    {
        if (!string.IsNullOrWhiteSpace(mailEnclosure))
        {
            string[] mailEnclosures = mailEnclosure.Split(';');
            if (mailEnclosures != null && mailEnclosures.Length > 0)
            {
                Attachment attachFile = null;
                foreach (string path in mailEnclosures)
                {
                    attachFile = new Attachment(path);
                    mailMsg.Attachments.Add(attachFile);
                }
            }
            else
            {
                Growl.Info("附件之间请使用分号“;”进行分隔!");
            }
        }
    }
    catch (Exception err)
    {
        Growl.Error("在添加附件时有错误:" + err);
        //throw new Exception("在添加附件时有错误:" + err);
    }

    SmtpClient smtp = new SmtpClient();
    //指定发件人的邮件地址和密码以验证发件人身份
    smtp.Credentials = new System.Net.NetworkCredential(mailFrom, mailPwd);
    //设置SMTP邮件服务器
    smtp.Host = SMTPMailServer;

    try
    {
        //将邮件发送到SMTP邮件服务器
        smtp.Send(mailMsg);
        return true;
    }
    catch(SmtpException ex)
    {
        return false;
    }
}
2.运行结果,如下图:

备注:

1.本测试程序是基于.Net Framework4.5框架进行开发的

标签:string,C#,如下,发送,发件人,mailMsg,new,邮件
From: https://www.cnblogs.com/Boundless-Learn/p/16712314.html

相关文章

  • Codeforces Round #821 (Div. 2) ABCD1
    A.ConsecutiveSumhttps://codeforces.com/contest/1733/problem/A题目大意:给定一个长度为n的数组a。最多可以执行k次以下操作:选择两个指数i和j,其中imodk=jmodk......
  • CF1720E Misha and Paintings 题解
    神仙2700。首先统计出原数组中不同元素个数记作\(cnt\),如果\(cnt\lek\)说明元素个数不够,由于一次只能加一个颜色因此答案就是\(k-cnt\)。然后接下来要证明一个结论......
  • mac安装jenkins
    安装jenkins官网给出的命令是:Samplecommands:InstallthelatestLTSversion:brewinstalljenkins-ltsInstallaspecificLTSversion:brewinstalljenkins-lt......
  • Real-Time Ray Tracing 2
    高斯滤波:某一个像素i,周围的像素j(包括i自己)会对其滤波做出贡献,根据j离i的距离,得到高斯对应的值给i。其伪代码大致意思是:根据j离i的距离,算出其对i的贡献,然后用j的值乘以这个......
  • 实验2:Open vSwitch虚拟交换机实践
    实验内容(一)基本要求1.ovs-vsctl基础操作实践:创建OVS交换机,以ovs-xxxxxxxxx命名,其中xxxxxxxxx为本人学号。在创建的交换机上增加端口p0和p1,设置p0的端口号为100,p1的端口号......
  • CSP-S模拟7 序列问题 钱仓 自然数 环路
    T1:线性DP,求最长不下降子序列优化(cdp,树状数组)T2:断环为链,结论T3:序列上区间统计答案,线段树维护T4:咕了,矩阵乘法+分治优化,我就打个暴力T1:给你一个长度n的序列A(n<=5e5,ai<=......
  • 【Coel.学习笔记】随机化算法:模拟退火与爬山法
    简介模拟退火(\(\text{SimulateAnneal}\))和爬山法是随机化算法,二者的原理都在于通过随机生成答案并检查,把答案逐步缩小在一个可行的区间,尽可能地靠近正确答案。在考场......
  • Tomcat异常处理机制
    声明源码基于SpringBoot2.3.12中依赖的Tomcat异常例子tomcat中返回错误页面目前主要是以下两种情况。执行servlet发生异常程序中主动调用response.sendError()方......
  • 17.explicit关键字
    c++提供了关键字explicit,禁止通过构造函数进行的隐式转换。声明为explicit的构造函数不能在隐式转换中使用。[explicit注意]●explicit用于修饰构造函数,防止隐式转化。......
  • 面试突击85:为什么事务@Transactional会失效?
    导致@Transactional失效的常见场景有以下5个:非public修饰的方法;timeout超时时间设置过小;代码中使用try/catch处理异常;调用类内部的@Transactional方法;数......