在SSIS中Send Mail的方法主要有三种,使用Send Mail Task,使用Script Task和使用存储过程msdb.dbo.sp_send_dbmail。

一,使用Send Mail Task

Send Mail Task 是SSIS提供的Task,使用非常简单,但有限制:

  1. 只能发送普通的文本格式的邮件,不支持 HTML 格式的邮件。
  2. 链接到SMTP Server有两种验证方式,在域中使用 Windows 方式验证,或使用匿名验证。
  3. SMTP Server 使用默认的端口号25

Send Mail Task的限制是跟SMTP connection manager的配置有关

SMTP Sever:输入SMTP Server的URL

Authentication:如果选择Use Winodows Authentication,那么用户必须在域中,使用Windows账户验证;如果不选择Use Winodows Authentication,那么验证方式就是使用匿名访问SMTP Server,如果SMTP Server支持匿名访问,那么验证失败。

Enable Secure Sockerts Layer(SSL):是否对数据加密,SSL用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听

Timeout:超时时间

Package中使用Send Mail Task发送mail,这个mail带excel的附件,当成功发送一定数量的mail之后,发现一个问题,错误信息是

System.IO.IOException:Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host.

经过测试,错误原因可能是SMTP Server为链接预留缓存空间(8M),当附件的数据量到达8M阈值时,SMTP返回错误信息,将链接强制关闭。

Send Mail Task在循环使用SMTP Server的链接时,打开链接后,不会自动关闭。

我的疑问:为什么SMTP Server的链接不会自动关闭?

二,使用存储过程msdb.dbo.sp_send_dbmail

在Execute SQL Task中使用存储过程msdb.dbo.sp_send_dbmail 发送数据库邮件

三,使用Script Task,编写脚本发送mail

编写C#代码发送mail,主要是使用System.Net.Mail 类库来实现,需要添加命名空间

using System.Net.Mail; 

使用Script Task,能够使用HTML格式,也能使用密码进行验证,因此适用面光,能够编写格式比较丰富的邮件。

示例代码

 public void Main()
{
//Define Smtp client
int smtpPort = ;
String smtpServer = "smtp server url";
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = smtpServer;
smtpClient.Port = smtpPort; //Use Password Authentication
string loginUser = "";
string loginPwd = ""; System.Net.NetworkCredential myCredentials =
new System.Net.NetworkCredential(loginUser, loginPwd);
smtpClient.Credentials = myCredentials; //Use anonymous Authentication
//smtpClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; //define mail message
MailMessage message = new MailMessage(); //Define mail address
MailAddress fromAddress = new MailAddress("Sender Address", "Sender Name");
MailAddress toAddress = new MailAddress("Recipient Address", "Recipient Name"); message.From = fromAddress;
message.To.Add(toAddress);
//message.To.Add("Recipient Address"); message.Subject = "mail subject"; //Define Mail Body
message.Body = "text Mail Body";
message.IsBodyHtml = false; //message.Body = "html mail body";
//message.IsBodyHtml = true; // add attachment
string strAttachedFilePath="";
Attachment attachment = new Attachment(strAttachedFilePath);
message.Attachments.Add(attachment); //Define Mail Priority
int iPriority = ;
switch (iPriority)
{
case :
message.Priority = MailPriority.High;
break;
case :
message.Priority = MailPriority.Low;
break;
default:
message.Priority = MailPriority.Normal;
break;
} smtpClient.Send(message); //Dispose attachment
attachment.Dispose(); //Dispose Message
message.Dispose(); //Dispose Stmp client
smtpClient.Dispose(); // Close Script Task with success
Dts.TaskResult = (int)ScriptResults.Success;
}

注意:如果不将Attachment Dispose,循环使用附件时,SSIS会报附件正在被其他process使用的异常。

参照资料:

http://www.cnblogs.com/biwork/p/3999123.html

http://www.codeproject.com/Articles/85172/Send-Email-from-SSIS-with-option-to-indicate-Email

SSIS Send Mail的更多相关文章

  1. How to attach multiple files in the Send Mail Task in SSIS

    Let’s say you need to create a SSIS package that creates 2 files and emails the files to someone. Yo ...

  2. mailsend - Send mail via SMTP protocol from command line

    Introduction mailsend is a simple command line program to send mail via SMTP protocol. I used to sen ...

  3. 发送邮件的三种方式:Send Mail Message

    发送邮件的三种方式: 1.VBS 执行vbs脚本文件的程序为: system32文件下的 NameSpace = "http://schemas.microsoft.com/cdo/conf ...

  4. Send Mail using C# code

    using System.Net.Mail; public class MailHelp { public static void Send(string subject, string body) ...

  5. golang:send mail using smtp package

    go语言发送邮件,可以使用smtp包,两个关键函数: func PlainAuth(identity, username, password, host string) Auth func SendM ...

  6. Python 3.4 send mail

    #coding=utf-8 #Python 3.4 https://docs.python.org/3.4/library/ #IDE:Visual Studio 2015 Window10 impo ...

  7. python trojan development 1st —— use python to send mail and caputre the screen then combine them

    import smtplib from email.mime.text import MIMEText msg_from='1@qq.com' #发送方邮箱 passwd='bd' #填入发送方邮箱的 ...

  8. C# send mail with outlook and word mailmerge

    http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.document_members(v=office.15). ...

  9. Send Mail 网址

    http://www.codeproject.com/Tips/371417/Send-Mail-Contact-Form-using-ASP-NET-and-Csharp http://www.c- ...

随机推荐

  1. 网页加载图片原理<转>

    http://www.haorooms.com/post/web_http_request 图片的http请求,有很多种情况,那么究竟什么情况下面不会发生请求呢?下面我用案例一一列举一下,希望对你深入 ...

  2. Postman-CI集成Jenkins

    Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Newman 官方说明:Postman's command-line companion lets you ...

  3. 结对项目——高级四则运算检验器记录(168 & 187)

    首先,上图(*+﹏+*)~@ 1.如何看待结对编程 结对编程优点: 1.两个人能够相互支持,相互监督,客服编程过程中可能出现的烦躁的情况0_0. 2.在开发功能的同时,伴随了UnitTest的进行,可 ...

  4. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  5. VIM使用(一) VIM插件管理利器-vundle

    有关VIM的文件网上一大堆,这里只是记录一下我新配置环境的步骤.以备查看参考. sudo apt-get install gitgit clone https://github.com/gmarik/ ...

  6. ORA-12569: TNS: 包校验和失败解决方法一例

    经反复实验,发现OracleMTSRecoveryService服务使用端口1521,而这个端口默认是oracle数据库访问的监听端口.所以有两个办法,一是改变oracle数据库访问的监听端口,二是改 ...

  7. 从csdn博客搬家过来,请多关照!

    之前一直在csdn博客,也写了不少关于java的文章,主要是学习java上的一些问题.想通过这种方式来加深对问题的认知,同时也可以帮助到志同道合的人,一起在编程的道路上共进,共勉.

  8. Individual Project - Word frequency program - Multi Thread And Optimization

    作业说明详见:http://www.cnblogs.com/jiel/p/3978727.html 一.开始写代码前的规划: 1.尝试用C#来写,之前没有学过C#,所以打算先花1天的时间学习C# 2. ...

  9. 决策树 -- C4.5算法

    C4.5是另一个分类决策树算法,是基于ID3算法的改进,改进点如下: 1.分离信息   解释:数据集通过条件属性A的分离信息,其实和ID3中的熵:   2.信息增益率   解释:Gain(A)为获的A ...

  10. Linux 下比较文件内容并相同部分、不同部分

    说明,是通过file2内容与file1做比较,最后列出file1与file2不同的部分! 一.准备两个文件: [root@kinggoo.com test1]# cat file1 a b c d e ...