html - 通过电子邮件发送 SAS html 输出

标签 html email sas

我正在使用 SAS Enterprise Guide 6.1。我正在尝试使用 Windows 调度程序对下面的程序进行批处理以生成每周报告。它将有一些 proc 打印和 sgplots。我要发送给它的用户是高级用户,没有 SAS(如果他有,他将不知道如何处理该程序)。理想情况下,我只想通过电子邮件将附件发送给他,甚至将图表/结果嵌入电子邮件中,以便他可以查看。我的程序似乎正确地创建了 html 文件,但是当我在电子邮件中打开它时,sgplots 没有显示。有什么想法吗?谢谢。

filename temp email to="cthulhu@gmail.com"
                    subject="Testing the report"
                    type="text/html"
                    attach='/sasdata/cthulhu/email.html';

ods html path='/sasdata/cthulhu' file='email.html' gpath='/sasdata/cthulhu' style=htmlblue;

data have;
    input name $ class $ time score;
cards;
chewbacca wookie  1 97
chewbacca wookie 2 100
chewbacca wookie 3 95
saruman wizard 1 79
saruman wizard 2 85
saruman wizard 3 40
gandalf wizard 1 22
gandalf wizard 2 50
gandalf wizard 3 87
bieber canadian 1 50
bieber canadian 2 45
bieber canadian 3 10
;
run;

proc sql noprint;
    select count(distinct class) into :numclass
    from have;
    %let numclass=&numclass;
    select distinct class into :class1 - :class&numclass
    from have;
    select count(distinct name) into :numname
    from have;  
    %let numname=&numname;
    select distinct name into :name1 - :name&numname
    from have;
quit;

%macro printit;
%do i = 1 %to &numclass;
title "Report for &&class&i";
proc print data=have;
    where class="&&class&i";
run;
%end;
%mend;
%printit;

%macro plotit;
%do i = 1 %to &numname;
title "Plot for &&name&i";
proc sgplot data=have(where=(name="&&name&i"));
    series x=time y=score
    / legendlabel='score' markers lineattrs=(thickness=2);
    xaxis label="time";
    yaxis label='score';
run;
%end;
%mend;
%plotit;

ods html close;

data _null_;
   file temp;
   put 'This is a test';
run;

最佳答案

还有一个 DomPazz 没有提到的备选方案,为了完整起见,我将在此处包含它。我推荐这种方法,除非您发现自己处于以下情况:

  1. 不允许使用附件。
  2. 您唯一可以放置图像的位置是在 Intranet 或 HTTPS 服务器上。
  3. 电子邮件必须可从智能手机读取(智能手机通常不会连接到公司 VPN 或无法提供 HTTPS 凭据来下载和显示图像)。

缺点

  • SAS 不直接支持此方法。
  • 它需要第三方工具(例如 BLAT - http://www.blat.net/)。
  • 众所周知,HTML 电子邮件在呈现时非常挑剔,因此您必须保持简单。
  • 这不适合胆小的人。

概览

基本前提是您将图表创建为磁盘上的图像,在磁盘上创建 HTML 文件,然后使用第 3 方工具发送电子邮件。第三方工具会将图表嵌入到电子邮件中,您创建的 HTML 将使用所谓的 CID(内容 ID)引用嵌入的图像。

我建议先阅读/谷歌搜索术语“html 电子邮件 cid”以熟悉它。您可能还想稍微阅读一下 base64 编码和 mime 类型。您无需成为专家,只需充分了解它们是什么以及它们的大致工作原理即可。

开发/测试

您仍然可以使用 ODS 创建您的 .html 文件,但一定要使用 ODS HTML3,这会强制 SAS 使用旧版本的 HTML。它还强制它对每个元素重复样式。您需要它,因为 Outlook 等电子邮件客户端实际上使用 MS Word 引擎来呈现 HTML 电子邮件。

构建 .html 文件和图表后,在网络浏览器中打开 .html 文件并确保它正确显示。

一旦您的输出在您的网络浏览器中按需要显示,您还需要进行一些更改,然后才能将其作为电子邮件发送。在浏览器中开发时,您会注意到您嵌入了这样的图像:

<img src="my_image.png" />

我们不能为电子邮件这样做,我们需要像这样使用 CID 链接:

<img src="cid:my_image.png" />

当我们使用 BLAT 发送电子邮件时,我们将指定要嵌入的图像。图片名称将自动用于 CID: 命名约定。

您可以像这样使用 BLAT 发送电子邮件:

blat test.html -f "myemailaddress@myemailaddress.com" -subject "test" -html -alttextf test.html -embed test.png -server mail.mysmtpserver.com -to myrecipient@recipentemail.com 

就是这样。也许如果我有更多时间,我会提供带有工作示例的完整代码。

一些有用的读物​​:

http://24ways.org/2009/rock-solid-html-emails (阅读这个!!)

http://www.emailology.org

http://www.campaignmonitor.com/css/

HTML email align text

关于html - 通过电子邮件发送 SAS html 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254685/

相关文章:

java - 通过邮件发送非英文文本的问题

statistics - 将简单的 T 检验统计数据输出到 SAS 数据集

mysql - 使用 SAS、mySQL 或 Excel 从 mySql 数据库提取 Blob(存储的 xml)数据的最佳方法?

html - 为什么 css 背景大小会旋转图像?

javascript - 如何判断表单是通过 Select onChange 提交还是通过 Submit 按钮提交

objective-c - 从 Objective C 中的数据库向数组列表收件人发送邮件

php imap - 获取正文并制作纯文本

javascript - 单击 anchor 链接时如何忽略滚动,否则会听到滚动?

jquery - 在浏览器上居中元素

sas - 使用SAS计算缺失值的平均值