SAS程序猿/媛在工作中可能会碰到需要用SAS来发送邮件通知的问题,如将一个宏程序执行信息或者某个程序生成的结果发送给指定用户。如上图,就是一个宏执行完毕后发送的一个邮件通知,内容包括宏程序是否正确执行完毕、生成结果的路径以及结果的一个简单的概括。下面记录下我用到的两种SAS发送邮件方法:
- FILENAME EMAIL,这个语句可以实现有FORMAT的内容在邮件正文中。比如上图中定义的颜色。程序如下:
data uni(drop=rc: i);
if _n_=1 then do;
if 0 then set sashelp.class;
dcl hash h1(dataset: 'sashelp.class', multidata:'y');
h1.definekey('WEIGHT');
h1.definedata(all: 'yes');
h1.definedone();
dcl hash h2(dataset: 'sashelp.class');
dcl hiter hi('h2');
h2.definekey('WEIGHT');
h2.definedone();
end;
rc1=hi.first();
do while(rc1=0);
rc2= h1.find();
i=0;
do while(rc2=0 and i < 2);
i 1;
rc2=h1.find_next();
end;
if i < 2 then do;
output;
if i < 2 then h1.remove();
end;
rc1=hi.next();
end;
h1.output(dataset: 'dup');
run;
- 上面是不需要设置邮件信息的,设置的程序如下:
options emailsys='smtp' emailauthprotocol='login' emailhost='smtp.163.com' emailid='uemailid@163.com' emailpw='XXXXXXXX';
filename sende email to='huazizeng@gmail.com' subject='Demo';
data _null_;
file sende;
put 'Hello world!';
run;
- MAILX,程序如下:
/*正文*/
x 'cat test.txt | mailx -m -s "subject" huazizeng@gmail.com';
/*附件*/
x 'uuencode test.txt attach.txt | mailx -m -s "subject" huazizeng@gmail.com';
/*正文 附件*/
x '(cat test.txt; uuencode test.txt attach.txt) | mailx -m -s "subject" huazizeng@gmail.com';
需要注意的是,第二种方法中的文本如果有格式(比如有对齐的格式),那么在邮件正文中的格式可能会不正确,对于这种情况建议用第一种方法。