博客
关于我
C#实现邮件发送的功能
阅读量:178 次
发布时间:2019-02-28

本文共 5712 字,大约阅读时间需要 19 分钟。

发送邮件的核心技术与实现

在开发过程中,发送邮件是一个常用的功能模块。通过合理配置和调用相关类,可以实现邮件的发送功能。本文将详细介绍发送邮件所需的核心技术以及具体实现方法。

1.1 发送邮件的核心类

在开发过程中,发送邮件的核心类主要有 MyEmailSmtpClient。这些类分别负责邮件内容的处理和邮件传输的配置。

  • MyEmail:主要处理邮件的内容配置,包括接收方、发件方地址、邮件标题、邮件正文等信息。同时,还支持添加附件文件。

  • SmtpClient:负责通过 SMTP 协议发送邮件。该类内部封装了 SocketTcpClient 等低层通信组件,简化了邮件发送的开发过程。

1.2 邮件发送的配置参数

在使用 SmtpClient 类进行邮件发送时,需要配置以下几项参数:

  • 邮件服务器地址:可以是 IP 地址或 SMTP 服务器地址。
  • 发送端口号:默认为 25。
  • 验证方式:支持 NTLM 和其他验证方式。
  • SSL 加密:可选是否对邮件内容进行加密传输。
  • 1.3 具体代码示例

    以下是基于 C# 语言实现的邮件发送功能代码示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Mail;
    using System.Net.Mime;
    using System.IO;
    using System.Timers;
    using System.Xml;
    namespace MyEmailTest
    {
    public class Program
    {
    public static void Main(string[] args)
    {
    try
    {
    string senderServerIp = "123.125.50.133"; // SMTP 服务器地址
    string toMailAddress = "mingmingruyuedlut@163.com"; // 收件人地址
    string fromMailAddress = "mingmingruyuedlut@163.com"; // 发件人地址
    string subjectInfo = "Test sending e_mail"; // 邮件标题
    string bodyInfo = "Hello Eric, This is my first testing e_mail"; // 邮件内容
    string mailUsername = "mingmingruyuedlut"; // 发件箱用户名
    string mailPassword = ".........."; // 发件箱密码
    string mailPort = "25"; // 发件箱端口号
    string attachPath = "E:\\123123.txt; E:\\haha.pdf"; // 附件路径
    MyEmail email = new MyEmail(senderServerIp, toMailAddress, fromMailAddress, subjectInfo, bodyInfo, mailUsername, mailPassword, mailPort, false, false);
    email.AddAttachments(attachPath);
    email.Send();
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }
    }
    public class MyEmail
    {
    private MailMessage mMailMessage; // 邮件内容配置
    private SmtpClient mSmtpClient; // SMTP 传输配置
    public MyEmail(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable)
    {
    try
    {
    mMailMessage = new MailMessage();
    mMailMessage.To.Add(toMail);
    mMailMessage.From = new MailAddress(fromMail);
    mMailMessage.Subject = subject;
    mMailMessage.Body = emailBody;
    mMailMessage.IsBodyHtml = true;
    mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
    mMailMessage.Priority = MailPriority.Normal;
    mSmtpClient = new SmtpClient();
    mSmtpClient.Host = server;
    mSmtpClient.Port = Convert.ToInt32(port);
    mSmtpClient.UseDefaultCredentials = false;
    mSmtpClient.EnableSsl = sslEnable;
    if (pwdCheckEnable)
    {
    mSmtpClient.Credentials = new System.Net.NetworkCredential(username, password);
    }
    else
    {
    mSmtpClient.Credentials = new System.Net.NetworkCredential(username, password);
    }
    mSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    mSmtpClient.Send(mMailMessage);
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }
    public void AddAttachments(string attachmentsPath)
    {
    try
    {
    string[] path = attachmentsPath.Split(';');
    Attachment data;
    ContentDisposition disposition;
    for (int i = 0; i < path.Length; i++)
    {
    data = new Attachment(path[i], MediaTypeNames.Application.Octet);
    disposition = data.ContentDisposition;
    disposition.CreationDate = File.GetCreationTime(path[i]);
    disposition.ModificationDate = File.GetLastWriteTime(path[i]);
    disposition.ReadDate = File.GetLastAccessTime(path[i]);
    mMailMessage.Attachments.Add(data);
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }
    public void Send()
    {
    try
    {
    if (mMailMessage != null)
    {
    mSmtpClient = new SmtpClient();
    mSmtpClient.Host = mSenderServerHost;
    mSmtpClient.Port = mSenderPort;
    mSmtpClient.UseDefaultCredentials = false;
    mSmtpClient.EnableSsl = mEnableSsl;
    if (mEnablePwdAuthentication)
    {
    System.Net.NetworkCredential nc = new System.Net.NetworkCredential(mSenderUsername, mSenderPassword);
    mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");
    }
    else
    {
    mSmtpClient.Credentials = new System.Net.NetworkCredential(mSenderUsername, mSenderPassword);
    }
    mSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    mSmtpClient.Send(mMailMessage);
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    }
    }
    }

    2. 结论

    通过上述代码示例,可以清晰地看到实现邮件发送功能所需的核心技术和配置步骤。MyEmail 类负责邮件内容的配置,而 SmtpClient 类则负责邮件的传输过程。通过合理配置相关参数,可以实现邮件的成功发送。

    转载地址:http://jnin.baihongyu.com/

    你可能感兴趣的文章
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.7 Parameters vs Hyperparameters
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>