2016-01-21 41 views
1

我的代碼使用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; 
+1

請問您的問題是否可以引用?我不確定你想要達到什麼。 –

+0

將發送電子郵件的宏。使用文件名 – Apache11

+0

假設你的數據步驟正在工作,你可以把它包裝到宏中,我會在我的答案中顯示它。 –

回答

0

我不傾向於將電子郵件參數包含在datastep本身中,而是包含在fileref中。我用我的電子郵件地址測試了下面的代碼,它工作。

正如我在評論中所說的,只需要將您的datastep封裝在宏中,如果您希望它在宏內運行。

您可以有位置或關鍵字參數。詳細信息見source。在這個例子中我使用了關鍵字參數。你通過指定關鍵字來調用宏,然後像我顯示的最後一行那樣的值。如果你沒有放入任何東西,那麼關鍵字會被忽略。

順便說一句,空關鍵字會導致初始化的本地宏變量。讓像(%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 protected]); 
+0

「無法創建密碼」是彈出錯誤 – Apache11

+0

我已更改我的答案,以顯示如何爲宏指定用戶關鍵字參數。我不知道密碼的錯誤。在我的最後一個例子中,雙引號使用不正確。這可能會導致錯誤,或者可能是您連接到smtp服務器的方式,這可能會在您的配置中。 –

+0

使用谷歌搜索「無法創建密碼」導致Chris發佈此博客帖子,該帖子在評論中討論。似乎它可能與SAS /安全有關... http://blogs.sas.com/content/sasdummy/2013/07/31/gmail-from-sas-program/ – Quentin

0

Peeyush,

嘗試下面的代碼示例。確保輸入您的SMTP電子郵件主機詳細信息和電子郵件地址。如果您需要額外的自動化功能,您可以創建電子郵件地址宏變量:

%macro emailM; 
OPTIONS emailsys = SMTP emailhost = Youremail.Host.net emailport= 25; 
FILENAME Mailbox EMAIL '[email protected]'; 
attach=("\\somewhere\something\File.xls"); 
DATA _NULL_; 
FILE MailBox TO=("[email protected]" "[email protected]") 
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;