• SSIS 发送邮件


    在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 = 25;
                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 = 1;
                switch (iPriority)
                {
                    case 1:
                        message.Priority = MailPriority.High;
                        break;
                    case 3:
                        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

  • 相关阅读:
    20212917于欣月 202120222 《网络攻防实践》第十一周作业
    【区块链与隐私保护从入门到精通系列教程】第一篇 区块链基本概念与发展历程
    gRPC三种客户端类型实践【Java版】
    通用池化框架实践之GenericKeyedObjectPool
    所谓测试报告
    通用池化框架commonspool2实践
    module ‘tensorflow‘ has no attribute ‘placeholder‘
    ModuleNotFoundError: No module named ‘tensorflow.contrib‘
    Python虚拟环境
    webrtcvad失败解决办法
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4844119.html
Copyright © 2020-2023  润新知