SSIS脚本任务生成HTML内容发邮件无法正常显示问题咨询
问题原因
SSIS 内置的 Send Email Task 仅支持纯文本格式的邮件正文,即便传入的变量是HTML格式字符串,它也会默认将所有内容作为纯文本处理,所以收件人会直接看到原始HTML标签,不会渲染成表格。
解决方案
方案1:用Script Task直接发送HTML邮件(推荐)
直接在现有Script Task中添加发邮件逻辑,无需再调用Send Email Task,代码中明确指定正文为HTML格式即可,参考代码如下:
using System.Net.Mail; public void Main() { // 原有获取数据、生成HTML的逻辑保留 var data = Dts.Variables["User::EmailData"].Value; OleDbDataAdapter da = new OleDbDataAdapter(); DataTable dt = new DataTable(); da.Fill(dt, data); string emailHtmlBody = ConvertDataTableToHTML(dt); // 新增发邮件逻辑 MailMessage mail = new MailMessage(); mail.From = new MailAddress("你的发件人邮箱地址"); mail.To.Add("收件人邮箱地址"); mail.Subject = "订单及用户详情报表"; // 关键配置:指定正文为HTML格式 mail.IsBodyHtml = true; mail.Body = emailHtmlBody; SmtpClient smtp = new SmtpClient("你的SMTP服务器地址", 端口号); // 若SMTP需要身份验证则添加下方配置 smtp.Credentials = new System.Net.NetworkCredential("发件人账号", "发件人密码"); // 若SMTP需要SSL加密则添加下方配置 smtp.EnableSsl = true; smtp.Send(mail); Dts.TaskResult = (int)ScriptResults.Success; }
将代码中的发件人信息、SMTP服务器配置替换为实际使用的参数即可,无需再调用原有Send Email Task。
方案2:调整Send Mail Task配置+补充HTML声明(兼容性一般)
如果一定要使用自带的Send Mail Task,可以按以下步骤调整:
- 选中Send Mail Task,打开属性面板,找到
Expressions属性,点击右侧省略号按钮 - 新建表达式,属性选择
MessageSource,值设置为@[User::EmailMessage]变量 - 修改
ConvertDataTableToHTML方法,在返回的HTML内容最开头补充HTML文档声明,示例如下:
public static string ConvertDataTableToHTML(DataTable dt) { // 开头补充HTML文档声明,辅助部分邮件客户端识别格式 string html = "<!DOCTYPE html><html><body>"; html += "<table border ='1'>"; // 原有生成表格的逻辑全部保留 for (int i = 0; i < dt.Columns.Count; i++) html += "<th>" + dt.Columns[i].ColumnName + "</th>"; html += "</tr>"; for (int i = 0; i < dt.Rows.Count; i++) { html += "<tr style='color:blue;'>"; for (int j = 0; j < dt.Columns.Count; j++) html += "<td>" + dt.Rows[i][j].ToString() + "</td>"; html += "</tr>"; } html += "</table></body></html>"; return html; }
该方案对不同邮件客户端的兼容性较差,容易出现识别失败的情况,优先推荐使用方案1。
内容的提问来源于stack exchange,提问作者user4912134
相关产品推荐
相关产品推荐

