• SSIS 发送邮件


    在 SSIS 中我们可以通过 Send Mail Task 或者 Script Task 来发送邮件,当然还有第三种方式就是写存储过程调用发送邮件存储过程.

    Send Mail Task 发送邮件

    Send Mail Task 的使用其实非常的简单,配置的步骤也并不多,但是在使用它的时候有几个限制:

    1. 只能发送普通的文本格式的邮件,也就是说不支持 HTML 格式的邮件。
    2. 连接 SMTP Server 时不支持用户填写用户名和密码,也就是说用户要么在域环境下 SMTP Server 对用户进行 Windows 方式验证,要么就是访问的 SMTP Server 支持匿名访问,不需要提供用户名和密码。
    3. SMTP Server 的端口号使用默认的,也就是说如果在域中的 SMTP Server 端口号不是默认的话 Send Mail Task 就无法使用了。 

    这里是我常用的一个测试服务器地址 http://www.yopmail.com/en/ ,免费的并支持匿名访问,可以通过它来进行邮件发送的测试。关于 Send Mail Task 的使用方式就不在这里演示了,在非域和非 Windows 验证方式下用我提到的可匿名访问的 Yop Mail 一试便知,主要是讲 Script Task 发送邮件的方式。

    Script Task 发送邮件

    新建一个包并首先创建一个 SMTP 连接 - New Connection。

    选择 SMTP 连接管理器。

    以我的邮箱为例子 BIWORK@126.com 发送邮箱服务器是 smtp.126.com,这个可以在网易邮箱配置页面查到。但是非常遗憾!在这里仍然是没有地方可以配置用户名和密码的,默认的情况下仍然是只支持 Windows 验证或者匿名访问。

    所以说,如果想要在 SMTP Connection 里自己动手配置用户名和密码是不可能的,那么像这种 163,126等等很多很多邮箱直接通过 SMTP Connection 是肯定无法完成发送邮件操作的。

    看下图时一定要理解一点:几乎每一个 SSIS 控件的属性都是可配置的,也是可获取的,这是我们在 SSIS ETL 的学习过程中解决很多很多问题的最关键的地方!

    新建一些常用的变量,发件人,收件人,抄送,邮件标题,内容,附件地址,还有用户名和密码等。

    其中 PV_CONTENT 变量描述的是邮件发送的 HTML 格式的内容,注意是字符串类型的因此需要双引号。

    "<h1>Hi BIWORK!</h1>
    <p>
    This is a test email from the test SSIS package of BIWORK!
    </p>
    <p>Server Name - "+ @[System::MachineName] +"</p>
    <p>Package Name - "+ @[System::PackageName] +"</p>
    <p>Package Start Time - "+ (DT_WSTR, 12) ( DT_DBDATE) @[System::StartTime] +"</p>
    <p></br>Thanks and Regards!</p>
    <p>Simon</p>"

    系统变量的信息也通过表达式嵌入到邮件正文中。

    编辑 Script Task 并引入这些变量,Script Task 中的代码 -

    using System.Net.Mail; // BIWORK Added
    using System.Text.RegularExpressions; // BIWORK Added

    Main 中的代码包括处理优先级,多个收件人的处理,用户名和密码,添加附件的方式等等。

    public void Main()
            {
                // Default Priority and SMTP Server Port
                int iPriority = 1;
                int smtpPort = 25;
                 
                //User::PV_ATTACHED_FILE,User::PV_CONTENT,User::PV_MAIL_FROM,
                //User::PV_MAIL_TO,User::PV_MAIL_TO_CC,User::PV_TITLE
                String mailFrom = Dts.Variables["User::PV_MAIL_FROM"].Value.ToString();
                String mailTo = Dts.Variables["User::PV_MAIL_TO"].Value.ToString();
                String mailToCC = Dts.Variables["User::PV_MAIL_TO_CC"].Value.ToString();
                String mailTitle = Dts.Variables["User::PV_TITLE"].Value.ToString();
                String mailContent = Dts.Variables["User::PV_CONTENT"].Value.ToString();
                String mailAttachedFilePath = Dts.Variables["User::PV_ATTACHED_FILE"].Value.ToString();
                
                // User Information
                String loginUser = Dts.Variables["User::PV_LOGIN_USER"].Value.ToString();
                String loginPwd = Dts.Variables["User::PV_LOGIN_PWD"].Value.ToString();
    
                // Get SMTP Server Information from Connection Manager
                String smtpServer = Dts.Connections["CM_SMTP_126"].Properties["SmtpServer"].GetValue(Dts.Connections["CM_SMTP_126"]).ToString();
    
                try
                {
                    SmtpClient smtpClient = new SmtpClient();
                    MailMessage message = new MailMessage(); 
                    MailAddress fromAddress = new MailAddress(mailFrom, "BIWORKTEST");
    
                    string[] sEmailTo = Regex.Split(mailTo, ";");
                    string[] sEmailToCC = Regex.Split(mailToCC, ";");
    
                    smtpClient.Host = smtpServer;
                    smtpClient.Port = smtpPort;
    
                    // Login information
                    System.Net.NetworkCredential myCredentials =
                       new System.Net.NetworkCredential(loginUser, loginPwd);
                    smtpClient.Credentials = myCredentials;
    
                    // Attachment 
                    System.Net.Mail.Attachment attachment;
                    attachment = new System.Net.Mail.Attachment(mailAttachedFilePath);
                    message.Attachments.Add(attachment);
                     
                    message.From = fromAddress;  
    
                    // Multiple email to address
                    if (sEmailTo != null)
                    {
                        for (int i = 0; i < sEmailTo.Length; ++i)
                        {
                            if (sEmailTo[i] != null && sEmailTo[i] != "")
                            {
                                message.To.Add(sEmailTo[i]);
                            }
                        }
                    }
    
                    // Multiple cc address
                    if (sEmailToCC != null)
                    {
                        for (int i = 0; i < sEmailToCC.Length; ++i)
                        {
                            if (sEmailToCC[i] != null && sEmailToCC[i] != "")
                            {
                                message.To.Add(sEmailToCC[i]);
                            }
                        }
                    }
    
                    // Email priority
                    switch (iPriority)
                    {
                        case 1:
                            message.Priority = MailPriority.High;
                            break;
                        case 3:
                            message.Priority = MailPriority.Low;
                            break;
                        default:
                            message.Priority = MailPriority.Normal;
                            break;
                    }
    
                    message.Subject = mailTitle;
                    message.IsBodyHtml = true;
                    message.Body = mailContent;
    
                    smtpClient.Send(message);
                }catch (Exception ex)
                {
                    Dts.TaskResult = (int)ScriptResults.Failure;
                }
                // Close Script Task with success 
                Dts.TaskResult = (int)ScriptResults.Success; 
            }

    保存并执行 SSIS 包,执行成功!

  • 相关阅读:
    【愚人节快乐】拥抱Bootstrap,FineUI新版效果超炫!
    FineUIMvc新特性速递(大间距模式,隐藏菜单垂直滚动条)
    FineUI经典项目展示(2)基础管理系统(附在线演示)
    FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
    FineUIMvc随笔(5)UIHelper是个什么梗?
    FineUIMvc随笔(4)自定义回发参数与自定义回发
    FineUIMvc随笔(3)不能忘却的回发(__doPostBack)
    FineUI经典项目展示(1)生产在线管理系统
    FineUIMvc随笔(2)怎样在控件中嵌套 HTML
    FineUIPro v3.5.0发布了,减少 90% 的上行数据量,15行代码全搞定!
  • 原文地址:https://www.cnblogs.com/Harvard-L/p/5007358.html
Copyright © 2020-2023  润新知