Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 发送电子邮件的宏_Sas_Sas Macro - Fatal编程技术网

Sas 发送电子邮件的宏

Sas 发送电子邮件的宏,sas,sas-macro,Sas,Sas Macro,使用sas数据步骤发送邮件的我的代码。这里尝试创建一个代码来发送邮件 FILENAME outbox EMAIL ("***********"); DATA _NULL_; FILE outbox TO=("************") FROM=("***********") SUBJECT=("Example of a SAS E-mail" ); /* ATTACH=(""); */ PUT " "; PUT "Hello Boss,"; PUT " "; PUT "Attached ar

使用sas数据步骤发送邮件的我的代码。这里尝试创建一个代码来发送邮件

FILENAME outbox EMAIL ("***********");
DATA _NULL_;
FILE outbox
TO=("************")
FROM=("***********")
SUBJECT=("Example of a SAS E-mail" );
/* ATTACH=(""); */
PUT " ";
PUT "Hello Boss,";
PUT " ";
PUT "Attached are the Daily Operational Reports.";
PUT " ";
PUT "rrt";
RUN;

我不倾向于在datastep本身中包含电子邮件参数,而是在fileref中。我已经用我的电子邮件地址测试了下面的代码,它成功了

正如我在评论中所说的,如果希望在宏中运行datastep,只需将其包装在宏中即可

可以有位置参数或关键字参数。有关详细信息,请参见此。我在这个例子中使用了关键字参数。您可以通过指定关键字和值来调用宏,就像我在最后一行显示的那样。如果你不放任何东西,那么关键字就会被忽略

顺便说一下,空关键字会导致初始化局部宏变量。Let语句(如(%Let FROM=FROM=“&FROM”)用于将字符串“FROM=”添加到“FROM”宏变量的开头,以便文件名语法完整。若宏变量(如“FROM”)按原样传递,它将解析为文件名不知道如何处理的电子邮件地址

   %MACRO send_email (TO=,FROM=,SUBJECT=,ATTACHMENT=,BODY=);
    %IF &TO ne %THEN
        %LET TO="&TO";

    %IF &FROM ne %THEN
        %LET FROM=FROM="&FROM";

    %IF &SUBJECT ne %THEN
        %LET SUBJECT=SUBJECT="&SUBJECT";

    %IF &ATTACHMENT ne %THEN
        %LET ATTACHMENT=ATTACHMENT="&ATTACHMENT";

    %IF &BODY ne %THEN
        %LET BODY="&BODY";
    FILENAME outbox EMAIL &TO &FROM &SUBJECT &ATTACHMENT;

    DATA _NULL_;
        FILE outbox;
        PUT &BODY;
    RUN;

%MEND;

%send_email(email=example@example.com);

我不倾向于在datastep本身中包含电子邮件参数,而是在fileref中。我已经用我的电子邮件地址测试了下面的代码,它成功了

正如我在评论中所说的,如果希望在宏中运行datastep,只需将其包装在宏中即可

可以有位置参数或关键字参数。有关详细信息,请参见此。我在这个例子中使用了关键字参数。您可以通过指定关键字和值来调用宏,就像我在最后一行显示的那样。如果你不放任何东西,那么关键字就会被忽略

顺便说一下,空关键字会导致初始化局部宏变量。Let语句(如(%Let FROM=FROM=“&FROM”)用于将字符串“FROM=”添加到“FROM”宏变量的开头,以便文件名语法完整。若宏变量(如“FROM”)按原样传递,它将解析为文件名不知道如何处理的电子邮件地址

   %MACRO send_email (TO=,FROM=,SUBJECT=,ATTACHMENT=,BODY=);
    %IF &TO ne %THEN
        %LET TO="&TO";

    %IF &FROM ne %THEN
        %LET FROM=FROM="&FROM";

    %IF &SUBJECT ne %THEN
        %LET SUBJECT=SUBJECT="&SUBJECT";

    %IF &ATTACHMENT ne %THEN
        %LET ATTACHMENT=ATTACHMENT="&ATTACHMENT";

    %IF &BODY ne %THEN
        %LET BODY="&BODY";
    FILENAME outbox EMAIL &TO &FROM &SUBJECT &ATTACHMENT;

    DATA _NULL_;
        FILE outbox;
        PUT &BODY;
    RUN;

%MEND;

%send_email(email=example@example.com);
皮尤斯

请尝试下面的代码示例。确保输入您的SMTP电子邮件主机详细信息以及收发电子邮件的电子邮件地址。如果需要额外的自动化,可以使用电子邮件地址宏变量:

%macro emailM;
OPTIONS emailsys = SMTP emailhost = Youremail.Host.net emailport= 25;
FILENAME Mailbox EMAIL 'You@something.com';
attach=("\\somewhere\something\File.xls");
DATA _NULL_;
FILE MailBox TO=("somebody@something.com" "somebody2@something.com") 
Subject="Example of a SAS E-mail";
PUT "Hello Boss,";
PUT " ";
PUT "Attached are the Daily Operational Reports.";
PUT " ";
PUT "Thank you";
RUN;
%mend emailM;

%emailM;
皮尤斯

请尝试下面的代码示例。确保输入您的SMTP电子邮件主机详细信息以及收发电子邮件的电子邮件地址。如果需要额外的自动化,可以使用电子邮件地址宏变量:

%macro emailM;
OPTIONS emailsys = SMTP emailhost = Youremail.Host.net emailport= 25;
FILENAME Mailbox EMAIL 'You@something.com';
attach=("\\somewhere\something\File.xls");
DATA _NULL_;
FILE MailBox TO=("somebody@something.com" "somebody2@something.com") 
Subject="Example of a SAS E-mail";
PUT "Hello Boss,";
PUT " ";
PUT "Attached are the Daily Operational Reports.";
PUT " ";
PUT "Thank you";
RUN;
%mend emailM;

%emailM;

请你改写你的问题好吗?我不确定你想达到什么目的。一个可以发送电子邮件的宏。使用文件名假设您的数据步骤正在工作,您可以将其包装到宏中,我将在我的答案中显示它。您遇到了什么问题?你的问题完全不清楚。请你把你的问题改写一下好吗?我不确定你想达到什么目的。一个可以发送电子邮件的宏。使用文件名假设您的数据步骤正在工作,您可以将其包装到宏中,我将在我的答案中显示它。您遇到了什么问题?您的问题完全不清楚。我已更改了答案,以显示如何使用宏的关键字参数。我不知道密码的错误。在我的上一个示例中,双引号使用错误。这可能是错误的原因,也可能是您连接到smtp服务器的方式,smtp服务器可能位于您的配置中。通过谷歌搜索“无法创建密码”可以找到Chris的这篇博文,在评论中讨论了这个问题。似乎它可能与SAS/secure…@quentin@Vasoliji我读了d博客,但现在有一个错误->错误:找不到电子邮件主机文件名为什么在%let语句中使用multiple==呢?你好,Peeyush,它不是双等号。在本例中(FROM=FROM=“&FROM”),第一个“FROM”是我分配“FROM=”值以及“&FROM”参数值的宏变量的名称。关于您的电子邮件主机问题,您的原始数据步骤是否正常工作?您可以检查实例中是否正确设置了EMAILHOST=System选项吗?顺便说一下,要检查EMAILHOST选项,您应该运行以下代码:PROC OPTIONS Option=EMAILHOST;跑检查您的日志,您必须看到您的emailhost选项的值,例如smtp.gmail.comI已更改我的答案,以显示如何使用宏的用户关键字参数。我不知道密码的错误。在我的上一个示例中,双引号使用错误。这可能是错误的原因,也可能是您连接到smtp服务器的方式,smtp服务器可能位于您的配置中。通过谷歌搜索“无法创建密码”可以找到Chris的这篇博文,在评论中讨论了这个问题。似乎它可能与SAS/secure…@quentin@Vasoliji我读了d博客,但现在有一个错误->错误:找不到电子邮件主机文件名为什么在%let语句中使用multiple==呢?你好,Peeyush,它不是双等号。在本例中(FROM=FROM=“&FROM”),第一个“FROM”是我分配“FROM=”值以及“&FROM”参数值的宏变量的名称。关于您的电子邮件主机问题,您的原始数据步骤是否正常工作?您可以检查实例中是否正确设置了EMAILHOST=System选项吗?顺便说一下,要检查EMAILHOST选项,您应该运行以下代码:PROC OPTIONS Option=EMAILHOST;跑检查日志,您必须看到emailhost选项的值,如smtp.gmail.com