在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. Object-C内存管理的理解总结

    今天看到了OC的内存管理这块,觉得很亲切. 自己的习惯是尽量自己掌控程序的空间和时间,有点强迫症的感觉.用C和C++做项目的时候,时时刻刻都在操心这new和delete的配对使用和计数,学习stl和b ...

  2. mentohust 你让我如何说你是好呢?

    最近换了ubuntu系统结果热了不少的麻烦,  借此机会唠叨一下, 首先是你这个ubuntu16.4 你这个bug 太让人郁闷了吧,或许主要是应该怪我菜,装个看家的软件eclipse.还热除了一堆的麻 ...

  3. Hyper-V初涉_Hyper-V虚拟机文件交换

    使用虚拟机时,文件交互就显得十分重要.如果能实现物理机与虚拟机之间的文件交互,将会节省大量的时间.比较可惜的是,Hyper-V虚拟机并不支持USB存储设备,所以在文件交换上略显麻烦. 与Hyper-V ...

  4. Handler机制来处理子线程去更新UI线程控件

    public class HandlerTestActivity extends Activity { private TextView tv; private static final int UP ...

  5. Linux下多路径multipath配置

    一.multipath在redhat 6.2中的基本配置: 1. 通过命令:lsmod |grep dm_multipath  检查是否正常安装成功.如果没有输出说明没有安装那么通过yum功能安装一下 ...

  6. 【C-顺序程序结构】

    一.C语句 可分为以下五类: ① 表达式语句 表达式: ②.函数调用语句 函数名(实际参数表); ③.控制语句 条件判断语句:if语句.switch语句: 循环执行语句:do while语句.whil ...

  7. CSS 禁止浏览器滚动条的方法(转)

    1.完全隐藏 在<boby>里加入scroll="no",可隐藏滚动条: <boby scroll="no"> 这个我用的时候完全没效果 ...

  8. 酷狗 KRC 文件的解析

    清理硬盘发现以前写过一个进行一半的代码,这次补全并从硬盘删掉. 格式说明来自 https://shansing.com/read/392/ krc解码并解压缩后得到一个字符串,例子: [id:$000 ...

  9. JavaScript思维导图—变量

    JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/

  10. [转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率

    http://cankeyyin.blog.163.com/blog/static/12336178320124149391202/ 原理:将iphone的hd图片给ipad用,即: 使用原iphon ...