邮件发送程序

深入SMTP协议:构建邮件发送程序 简单邮件传输协议(SMTP)是用于发送电子邮件的互联网标准。它定义了如何将电子邮件发送方的邮件服务器传输到接收方的邮件服务器。SMTP是一种请求响应协议,它基于文本命令并以特定的状态代码响应。SMTP服务器使用端口25、465或587进行通信。SMTP协议允许用户在不需要与邮件服务器交互的情况下发送邮件。它遵循客户端-服务器模型,其中邮件客户端(如Outlook或Thunderbird)作为SMTP客户端,邮件服务器作为SMTP服务器。 阅读详情
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Text.RegularExpressions;
using System.IO;

namespace SendEmail
{
    class Program
    {
        static void Main(string[] args)
        {
            string strContent = GetAbandonNumAndRollbackNumOfRobot();
            Console.WriteLine(strContent);
            //接收者的邮件地址
            string strReceivers = ConfigurationManager.AppSettings["receiver"].ToString();
            string[] ArrMailto = strReceivers.Split(';');
            //抄送者的邮件地址
            string strCopytos = ConfigurationManager.AppSettings["copyto"].ToString();
            string[] ArrMailcc = strReceivers.Split(';');
            SendEmail(strContent,ArrMailto,ArrMailcc);
            Console.ReadKey();
        }

        /// <summary>
        /// 邮件发送程序
        /// </summary>
        /// <param name="strbody">发送的主体信息</param>
        /// <param name="ArrMailTo">接收人</param>
        /// <param name="ArrMailCc">抄送</param>
        static void SendEmail(string strbody, string[] ArrMailTo, string[] ArrMailCc)
        {
            try
            {
                //验证是否为正确的邮件地址
                Regex regMail = new Regex(@"^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$");
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("xxxxx@gmail.com");//发送者的邮箱
                foreach (var item in ArrMailTo)
                {
                    if (regMail.Match(item).Success)
                    {
                        mail.To.Add(item);
                    }
                }
                foreach (var item in ArrMailCc)
                {
                    if (regMail.Match(item).Success)
                    {
                        mail.CC.Add(item);
                    }
                }
                mail.Subject = "自动分拣人工复核数据统计";
                if (strbody.Equals(""))
                {
                    mail.Body =  DateTime.Today.ToLocalTime().ToString()+"—" + DateTime.Now.ToString() + "没有自动分拣人工复核数据";
                }
                else
                {
                    mail.Body = strbody;
                }               
                mail.BodyEncoding = Encoding.Default;
                //发送优先级
                mail.Priority = MailPriority.High;
                SmtpServer.Port = 587;
                SmtpServer.Credentials = new System.Net.NetworkCredential("xxxxx@gmail.com", "password");//发送者的邮箱与密码
                SmtpServer.EnableSsl = true;

                SmtpServer.Send(mail);
                Console.WriteLine("Mail sent successfully");
                ErrorLog("SendmailLog" + ".txt", "【" + string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now) + "】:Mail sent successfully"); 
            }
            catch (Exception ex)
            {
                Console.WriteLine("the mail sends out the failure:"+ex.ToString());
                ErrorLog("SendmailLog" + ".txt", "【" + string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now) + "】:the mail sends out the failure \n" + ex.ToString()); 
            }
        }
        /// <summary>
        /// 获得发送文件的主体信息
        /// </summary>
        /// <returns>主体信息</returns>
        static string GetAbandonNumAndRollbackNumOfRobot()
        {
            SqlDataReader sdrData = GetData();
            string strContent = "";//发送邮件的主体部分
            Regex regCHS = new Regex(@"[\u4e00-\u9fa5]+");//所有汉字
            int intMax = 15;//每一列的宽度为intMax
            char charReplace = ' ';
            bool flag = true;
            while (sdrData.Read())
            {
                if (flag)
                {
                    //获得标题
                    for (int i = 0; i < sdrData.FieldCount; i++)
                    {
                        var str = sdrData.GetName(i);
                        int n = str.Length;
                        if (regCHS.Match(str).Success)
                        {
                            //设定样式,每一列的宽度为intMax
                            str = str.PadRight(intMax - n, charReplace);
                        }
                        else
                        {
                            //字符长度不满足的情况以charReplcae补齐
                            str = str.PadRight(intMax, charReplace);
                        }
                        strContent = strContent + str;
                    }
                    flag = false;
                    strContent = strContent + "\n";
                }
                //获得内容
                for (int i = 0; i < sdrData.FieldCount; i++)
                {
                    var str = sdrData.GetValue(i).ToString();
                    int n = str.Length;
                    if (regCHS.Match(str).Success)
                    {
                        str = str.PadRight(intMax - n, charReplace);
                    }
                    else
                    {
                        str = str.PadRight(intMax, charReplace);
                    }
                    strContent = strContent + str;
                }                
                strContent = strContent + "\n";
            }
            return strContent;
        }
        /// <summary>
        /// 读取数据库操作
        /// </summary>
        /// <returns></returns>
        static  SqlDataReader GetData()
        {
            //测试的连接串
            string StrCon = ConfigurationManager.ConnectionStrings["ConSql"].ConnectionString;
            SqlConnection conn = new SqlConnection(StrCon);
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandTimeout = 1000;       
                cmd.Connection = conn;
                cmd.CommandText = "pr_QueryAbandonNumAndRollbackNumOfRobot";//需要调用的存储过程
                cmd.CommandType = CommandType.StoredProcedure;
                conn.Open();
                //获得数据
                SqlDataReader sqlDate = cmd.ExecuteReader(CommandBehavior.CloseConnection);//执行完后关闭连接
                return sqlDate;
            }
            catch (Exception e)
            {
                ErrorLog("SendmailLog" + ".txt", "【" + string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now) + "】:读取数据库操作出现问题 \n"+e.ToString()); 
                return null;
            }
            finally
            {              
                //sqlconn.Close();
            }
        }
        /// <summary>
        /// record the error log
        /// </summary>
        /// <param name="FileName">file name of log</param>
        /// <param name="FileContent">error information</param>
        private static void ErrorLog(string FileName, string FileContent)
        {
            try
            {
                string strPath = System.IO.Directory.GetCurrentDirectory() + "\\Log";
                if (!Directory.Exists(strPath))
                {
                    // Create the directory it does not exist. 
                    Directory.CreateDirectory(strPath);
                }
                if (FileName.IndexOf("/") != -1)
                {
                    FileName = FileName.Replace("/", "-");
                }
                string strLogName = strPath + "\\" + FileName;
                FileInfo LogFile = new FileInfo(strLogName);
                StreamWriter TextFile = LogFile.AppendText();
                //如果日志文件大于50M 
                if (LogFile.Length < 50000000)
                {
                    TextFile.WriteLine(FileContent);
                }
                TextFile.Close();

            }
            catch (Exception e)
            {

                Console.WriteLine(e.ToString());
            }

        }
    }
}


程序实现发送邮件 通过上面的实例程序就可以实现简单的发送一个邮箱的功能 ,还有些需要注意的就是,如果出现错误 ,检查是否自己邮箱是否开启smtp协议 以本例为例 去自己的邮箱设置smtp为开启状态。 立即下载

相关推荐

简单发邮件程序

1:发邮件功能如下:   a:批量添加邮箱   b:添加多个附件、并支持查看附件信息和移除附件。 2:因为免费,所以126,136服务器人家对咱 有控制:(我测试了126,136邮件)   1:邮箱虽已分组发送,但一次只能发送35个之内。   2:附件大小控件在50M。 3:功能采用c#的SmtpClient和MailMessage实现,源代码如下: 批量导入邮箱: 添加附件: 邮件发组: 发邮件

c# 发送邮件,抄送人格式:半角逗号隔开

c# 发送邮件,抄送人格式:半角逗号隔开

p_754185759的专栏 401

一个非常简单的网页邮件发送程序

一个非常简单的网页邮件发送程序,没有增加线程保护,可用于状态触发下的邮件通知.

程序邮件 - 从忐忑到坦然

目录1. 版权2. 免费邮箱方式3. 阿里云邮件推送方式购买域名配置域名smtp协议使用gomail发送错误处理4. 安全delaylimitby-域名 limit (mysql) 1. 版权 本文为原创,遵循 CC 4.0 BY-SA 版权协议,转载需注明出处: https://blog.csdn.net/big_cheng/article/details/116099081. 2. 免费邮箱方式 最开始很自然想到的是申请一个免费邮箱, 用来在程序发送邮件. 但是实践证明不可行: 免费的速度慢、服务商

big_cheng的博客 2479

邮箱推送

实现: 邮箱推送消息或者邮箱注册验证 优势: 零成本;发邮件没有费用; 内容丰富且量大;邮件可以长篇大论;图文并茂; 增加访问量;用户很容易通过邮件中的链接访问网站; 前提: 首先我们要确认我们的邮件发送的扩展项已经开启, 查看方式: ...

chisanggao1203的博客 454

程序控制发送文件到邮箱_Kindle电子邮箱推送

Kindle 推送支持的格式目前 Kindle 推送仅支持以下几种格式。需要注意的是,AZW 和 AZW3 是两种不同的格式,虽然这两种格式 Kindle 设备都支持阅读,但是亚马逊的个人文档服务支持推送 AZW 但是不支持 AZW3。Kindle 格式 (.mobi 或 .azw)* 推荐格式Microsoft Word (.doc 或 .docx)HTML (.html, .htm...

weixin_39587113的博客 1313

Java实战邮件推送

Java实现邮件推送

keke的博客 1029

程序发送邮件,小程序云开发使用云函数发送邮件

上一节给大家讲了借助小程序云开发的云函数管理mysql数据库,这一节,就来给大家讲一讲使用云开发云函数实现邮件发送的功能。 老规矩,先看效果图 通过上面的日志,可以看出我们是158的邮箱给250的邮箱发送邮件,下面是成功接收到的邮件。 准备工作 1,qq邮箱一个 2,开通你的qq邮箱的授权码(会具体讲解) 3,注册自己的小程序(因为只有注册的小程序才能使用云开发) 4,电脑要安装node(...

编程小石头 8807

Python小项目:基于tkinter开发邮件发送程序

本文介绍了一个使用Python和tkinter库创建的简单邮件发送界面。用户可以通过界面输入发件人邮箱、名称,收件人邮箱列表,邮件主题,发件人授权码和邮件内容,并通过点击按钮发送邮件。该界面使用了tkinter库创建用户界面和控件,并调用email和smtplib库来处理邮件操作。通过这个示例,用户可以学习如何创建自己的邮件发送界面,并进行进一步的功能扩展和优化。希望这个示例对用户有所帮助,使邮件发送变得更轻松和便捷。

蓝色是天的博客 1927

ABAP-邮件发送程序

ABAP-邮件发送程序 说明: IT_ITAB 是要传送的EXCEL表格中的数据 data: IT_DOCUMENT_DATA TYPE SODOCCHGI1, IT_CONTENT_TEXT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE, IT_PACKING_LIST TYPE TABLE OF SOPCKLSTI1...

smzyydwwb的博客 2453

python学习——邮件发送程序

程序留存使用,网上找的教程,不能运行, 自己修改了一下, 主流邮箱不能登录, 比如163,qq 但是自己个人邮箱能够登录,并发送成功 问题关键在于如何能够登录成功, 只要登录成功, 就能够发送成功不管是给 163 qq #!/usr/bin/env python #coding=utf-8 from smtplib import * from

Jimy_Fengqi 2534

在VC中调用默认的电子邮件程序发送邮件

很多时候大家需要在程序发送邮件,自己编又太麻烦,怎么办,呵呵,有现成的!1、想省事儿的,用ShellExecute函数:ShellExecute(NULL,NULL,"mailto:email@263.net",NULL,NULL,SW_SHOW);2、如果想自己多处理一些东西的话,比如加上默认的帐号、密码、附件等,就可以调用系统的Mapi函数。具体的用法大家可以去查MSDN都是以MAPI开头的

Glacier的专栏 1万+

linux 发送邮件程序

大家都知道,要发送邮件,就是编写一个 smtp客户端,smtp其实是基于anscII的字符协议,说白了,也就是你往服务器上发送指定的字符,服务器便会有相应的响应,当然到底发送什么字符呢?这个就是smtp协议了。如果想发送二进制的文件,音视频数据,那么就需要MIME(通用internet邮件扩充协议),它利用一些编码方式将这些数据转化为anscII字符,发送出去,接收端在利用相应的解码方式进行解

2275

C#写一个简单的邮件发送程序

C#作业

永远的二爷 968

邮件的java程序_java实现发送邮件程序

import java.io.InputStream;import java.util.ArrayList;import java.util.Date;import java.util.Properties;import java.util.StringTokenizer;import javax.mail.Authenticator;import javax.mail.Message;impor...

weixin_29729247的博客 165

python:消息推送 - 发邮件(网易163邮箱为例)

实现推送的处理步骤:创建邮箱 - 设置登录的服务密码 - 开启邮箱IMAP/SMTP服务和POP3/SMTP服务。 开启成功后: 按照对应的邮件模块文档说明,将包装后的文件内容进行推送: import smtplib # 发邮件的模块 from email.mime.text import MIMEText # 定义邮件内容 from email.header import Header import logging def send_mail(): mail_content = "邮件

we chat:玩转测试开发 1941

怎么设置邮件推送?邮件推送小妙招。

在手机上进行邮件的收发消息推送,这样你拿这手机登录这微信就可以第一时间收到,不会拉下任何邮件

qimashang的博客 1186
上一篇: 自适应网页设计(Responsive Web Design)
下一篇: 【整】char、varchar、nchar、nvarchar的区别
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值