介绍

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

发送邮件的基本步骤

第一:需要指明邮件SMTP服务器地址:smtp..com
第二:开启SSL安全连接。
第三:用户凭证。

SmtpClient是什么

Socket → TcpListener → SmtpClient

简单的邮件发送

        /// <summary>
/// 最基本的发送邮件的方法
/// </summary>
public static void Send163Demo()
{
string user = "*****@163.com";//替换成你的hotmail用户名
string password = "******";//替换成你的hotmail密码
string host = "smtp.163.com";//设置邮件的服务器
string mailAddress = "*****@163.com"; //替换成你的hotmail账户
string ToAddress = "*******@163.com";//目标邮件地址。 SmtpClient smtp = new SmtpClient(host);
smtp.EnableSsl = true; //开启安全连接。
smtp.Credentials = new NetworkCredential(user, password); //创建用户凭证
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //使用网络传送
MailMessage message = new MailMessage(mailAddress, ToAddress, "标题", "发送内容"); //创建邮件
smtp.Send(message); //发送邮件 异步发送邮件 smtp.SendAsync(message, "huayingjie"); //这里简单修改下,发送邮件会变的很快。
Console.WriteLine("邮件发送成功!");
}

下面是对代码的封装,进行对hotmail、163、QQ发送邮件

using System.Collections.Generic;
using System.Net.Mail; namespace SendMail
{
public class MailModel
{
/// <summary>
/// 用户名,根据需要看是否需要带@hotmail.com
/// </summary>
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } /// <summary>
/// 服务器
/// </summary>
public string Host { get; set; } /// <summary>
/// 邮箱账户
/// </summary>
public string FromMailAddress { get; set; } /// <summary>
/// 目标账户
/// </summary>
public IList<string> ToAddress { get; set; } /// <summary>
/// 是否开启安全连接
/// </summary>
public bool EnableSsl { get; set; } /// <summary>
/// 传输协议
/// </summary>
public SmtpDeliveryMethod DeliveryMethod { get; set; } /// <summary>
/// 端口
/// </summary>
public int Port { get; set; } /// <summary>
/// 标题
/// </summary>
public string Subject { get; set; } /// <summary>
/// 内容
/// </summary>
public string Body { get; set; } public MailModel() {
ToAddress = new List<string>();
} public MailModel(
string userName,
string password,
string host,
string mailAddress,
IList<string> toAddress,
bool enableSsl,
SmtpDeliveryMethod deliveryMethod,
int port,
string title,
string content
)
{
UserName = userName;
Password = password;
Host = host;
FromMailAddress = mailAddress;
ToAddress = toAddress;
EnableSsl = enableSsl;
DeliveryMethod = deliveryMethod;
Port = port;
Subject = title;
Body = content;
}
}
}
using SendMail;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail; namespace SendMailDemo
{
class SendMail
{
public SendMail() { } /// <summary>
/// 最基本的发送邮件的方法
/// </summary>
public static void Send163Demo()
{
string user = "*****@163.com";//替换成你的hotmail用户名
string password = "******";//替换成你的hotmail密码
string host = "smtp.163.com";//设置邮件的服务器
string mailAddress = "*****@163.com"; //替换成你的hotmail账户
string ToAddress = "*******@163.com";//目标邮件地址。 SmtpClient smtp = new SmtpClient(host);
smtp.EnableSsl = true; //开启安全连接。
smtp.Credentials = new NetworkCredential(user, password); //创建用户凭证
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //使用网络传送
MailMessage message = new MailMessage(mailAddress, ToAddress, "标题", "发送内容"); //创建邮件
smtp.Send(message); //发送邮件
Console.WriteLine("邮件发送成功!");
} //可以
public static void SendHotmail()
{
string user = "*****@hotmail.com";
string password = "*****";
string host = "smtp.live.com";
string mailAddress = "*****@hotmail.com";
IList<string> toAddress = new List<string>();
toAddress.Add("*****@163.com");
bool enableSsl = true;
SmtpDeliveryMethod deliveryMethod = SmtpDeliveryMethod.Network;
int post = ;
string title = "标题";
string content = "发送内容";
MailModel mailModel = new MailModel(user, password, host, mailAddress, toAddress,
enableSsl, deliveryMethod, post, title, content); SennMail(mailModel);
} //可以
public static void Send163()
{
string user = "*****@163.com";
string password = "*****";
string host = "smtp.163.com";
string mailAddress = "*****@163.com";
IList<string> toAddress = new List<string>();
toAddress.Add("*****@163.com");
bool enableSsl = true;
SmtpDeliveryMethod deliveryMethod = SmtpDeliveryMethod.Network;
int post = ;
string title = "标题";
string content = "发送内容";
MailModel mailModel = new MailModel(user, password, host, mailAddress, toAddress,
enableSsl, deliveryMethod, post, title, content); SennMail(mailModel);
} public static void SendQQ()
{
string user = "*****@qq.com";
string password = "*****";
string host = "smtp.qq.com";
string mailAddress = "*****@qq.com";
IList<string> toAddress = new List<string>();
toAddress.Add("*****@qq.com");
bool enableSsl = true;
SmtpDeliveryMethod deliveryMethod = SmtpDeliveryMethod.Network;
int post = ;
string title = "标题";
string content = "发送内容";
MailModel mailModel = new MailModel(user, password, host, mailAddress, toAddress,
enableSsl, deliveryMethod, post, title, content); SennMail(mailModel); ;
} public static void SennMail(MailModel mailModel)
{
SmtpClient smtp = new SmtpClient(mailModel.Host);
smtp.EnableSsl = mailModel.EnableSsl;
smtp.Credentials = new NetworkCredential(mailModel.UserName, mailModel.Password);
smtp.DeliveryMethod = mailModel.DeliveryMethod;
//smtp.Port = mailModel.Port;//有些时候设置端口会出现很奇怪的问题,这个与服务器的设置有关,建议不要设置端口。
MailAddress mailAddress = new MailAddress(mailModel.FromMailAddress); MailMessage message = new MailMessage();
message.From = mailAddress;
foreach (string toAddress in mailModel.ToAddress)
{
message.To.Add(toAddress);
}
message.Subject = mailModel.Subject;
message.Body = mailModel.Body;
//message.IsBodyHtml = true;
smtp.Send(message);
Console.WriteLine("邮件发送成功!");
}
}
}
using System;

namespace SendMailDemo
{
class Program
{
static void Main(string[] args)
{
SendMail.Send163Demo();
//SendMail.Send163();
//SendMail.SendQQ();
//SendMail.SendHotmailDemo();
Console.ReadLine();
}
}
}

C#发送邮件源码的更多相关文章

  1. 16Aspx.com源码2014年7月详细

            Web电子商务网(三层)V2.0源码 2014-07-31   [VS2010] 源码介绍: Web电子商务网(三层)V2.0源码 源码描述: 一.源码特点     采用三层架构开发, ...

  2. java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)

     java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...

  3. centos7下源码方式安装gitlab8.9+发送邮件+ldap

    CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...

  4. 提高生产力:发送邮件API和Web服务(包含源码)

    在Web开发中,发邮件是一种非常常见的功能或任务. 发送邮件的6种方式 一文提到了6种方法,文章发表后,有网友指出了还有另外一种方法,Ant中也可以发送邮件. 打开Foxmail之类的邮件客户端或者在 ...

  5. 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端

    问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...

  6. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  7. ABP源码分析七:Setting 以及 Mail

    本文主要说明Setting的实现以及Mail这个功能模块如何使用Setting. 首先区分一下ABP中的Setting和Configuration. Setting一般用于需要通过外部配置文件(或数据 ...

  8. 结合ABP源码实现邮件发送功能

    1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...

  9. 2014年6月份第1周51Aspx源码发布详情

    企业汽车服务终端管理系统源码  2014-6-3 [VS2010]源码描述:本系统专门服务于(汽车美容4s店) 完整的一套汽车美容管理服务系统. 功能介绍:汽车美容服务终端功能强大而又简便实用,界面友 ...

随机推荐

  1. Shell | grep with n following lines

    'foo' sample.txt ➜ dex-method-counts git:(master) ./dex-method-counts ~/Downloads/n.apk | 'hui' hui: ...

  2. Flex 中文字体终极解决方案

    一直以来Flash对中文的支持就不是很好,很多人都发现很多汉字在Flex中无法设置粗体,就是其中一个表现,经过一晚上的折腾,终于突破了这个难题,其实,答案就在Adobe的官方教程里,只能怪自己英文水平 ...

  3. 慕课网-安卓工程师初养成-3-8 Java中的条件运算符

    来源:http://www.imooc.com/code/1306 条件运算符( ? : )也称为 “三元运算符”. 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为 t ...

  4. 全局变量&局部变量

    一.局部变量: 定义在函数内部的变量以及函数的形参成为局部变量 作用于:从定义那一行开始知道与其所在的代码块结束 生命周期:从程序运行到定义那一行开始分配存储空间到程序离开该变量所在的作用域 特点: ...

  5. struts2拦截器拦截成功后每次请求都出现拦截时的错误信息

    action中验证方法 在执行execute之前执行 @Override    public void validate() {        // TODO Auto-generated metho ...

  6. 由多次使用Statement实例引起的Result set already closed异常的解决方案

    在不同版本的Weblogic平台上迁移应用,产生了很严重的JDBC驱动版本不兼容的问题. 但是归根究底是代码的问题,废话少说,上代码示例. ..... //以下是问题代码 ResultSet rs=n ...

  7. ios frame bounds applicationframe

    ios里面的[uiscreen mainscreen]获得的frame是应用的frame大小,不包含status bar,所以高度会少20,但是self.view的frame就是表示整个可视的窗口的大 ...

  8. CSS常用布局整理

    固定宽度布局 1-2-1布局(浮动) <html xmlns="http://www.w3.org/1999/xhtml"> <head> <titl ...

  9. Date获取时间段

    /** * */ package com.chinabase.common.util; /** * @author yuanji * @created on:Sep 19, 2008 */ impor ...

  10. jquery的end(),addBack()方法example

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...