이메일은 SAS 작업 완료 시 알림을 보내거나 SAS 결과가 첨부된 보고서 또는 스프레드시트로 배포하는 데 좋은 수단입니다. SAS 프로그래밍 언어를 사용하여the FILENAME EMAIL method를 통해 이메일을 보낼 수 있습니다.
이 문서에 포함된 내용:
1. SAS를 통한 이메일 전송: 간단한 예시
FILENAME EMAIL 명령을 사용하면 제목, 받는 이, 참조, 숨은 참조 등을 포함한 모든 받는이, 보낸 이, 중요도 등을 포함하여 이메일의 모든 항목을 지정할 수 있습니다. 다음은 일부 데이터를 생성하고 데이터 기반 값과 작은 메시지 본문이 있는 이메일 메시지를 생성하는 SAS 프로그램의 예시입니다.
options emailsys=smtp;
/* Small SAS job to produce some data */ %let origin = Europe; proc sql; create table subset as select * from sashelp.cars where origin = "&origin.";
%let count=&sqlobs.; quit;
/* Email message with dynamic content based on data */ filename msg email to="chuck.sasuser@company.com" from="replies-disabled@company.com" subject = "Created: Cars from &origin.";
data _null_; file msg; put "%trim(&count.) cars selected, subset from &origin."; run; |
SAS 로그에 다음과 같이 표시됩니다.
NOTE: The file MSG is: |
받는 이는 수신함에 다음과 같은 내용이 표시됩니다.
FILENAME EMAIL의 샘플 이메일
2. SAS에서 이메일을 보내도록 SMTP를 구성하는 방법
이메일 전송시 SAS는 이메일 클라이언트 역할을 합니다. 메시지를 보내려면 SAS는 이메일 서비스를 필요로 하며 일반적으로 SMTP(Simple Mail Transfer Protocol)를 통해 액세스합니다. SAS 환경에서는 이미 구성되어 있을 수 있으며 또는 SAS 옵션을 통해 SMTP 설정을 해야 할 수 있습니다. 이러한 옵션에는 EMAILSYS, EMAILHOST, EMAILPORT 등이 있습니다.
이메일 옵션의 현재 값을 확인하려면 group=email과 함께 PROC OPTIONS를 실행하시면 됩니다.
proc options group=email; run; |
현재 값이 관리자에 의해 설정되지 않은 경우 OPTIONS 명령을 통해 프로그램 내에서 설정할 수 있습니다. 사용자 환경에 적합한 값을 확인하기 위해서는 시스템 관리자의 도움이 필요할 수 있습니다.
options emailsys=smtp emailhost=your.smtpemail.server.com emailport=25; |
SAS의 Chuck Hunley가 작성한 백서(PDF)를 통해 이메일 옵션 구성에 대한 유용한 가이드를 확인하실 수 있습니다.
3. SAS로 중요도 및 수신 확인과 같은 이메일 속성을 설정하는 방법
FILENAME EMAIL은 이메일 클라이언트 전체에서 설정할 수 있는 대부분의 이메일 표시를 지원합니다. 중요도, 수신 확인, 만료일 및 민감도와 같은 플래그는 FILENAME EMAIL 명령으로 작성된 특정 옵션으로 설정할 수 있습니다.
filename mail email from="watcher@creep.com" to="victim@school.edu" importance='high' readreceipt ct="text/html" subject="I know what you did last summer" sensitivity='private';
data _null_; file mail; put '<html><body>'; put '<h2>Uh oh</h2>'; put "<p>...and I'll keep quiet"; put "<br>for a price</p>"; put '</body></html>'; run; |
SAS의 이메일 속성 예시
4. ODD를 사용하여 이메일 형식을 지정하는 방법
대부분의 이메일 클라이언트는 HTML을 기반으로 풍부한 콘텐츠를 지원합니다. ODS HTML 또는 HTML과 유사한 태그 세트 중 하나를 사용하여 SAS 출력을 포함하는 사용자에 의해 정의된 메시지를 생성할 수 있습니다. 모든 이메일 클라이언트가 전체 범위의 HTML 구조, 서식 및 동작을 지원하는 것은 아니므로 HTML은 가급적 단순하게 유지하는 것이 좋습니다. 그러나 ODS를 사용하여 HTML로 메시지 본문을 작성하고 PROC REPORT 또는 PROC PRINT와 같은 표와 같은 형식을 포함할 수 있습니다. ODS TEXT 명령을 사용하여 메시지 내에 주석을 추가
이 코드 예시는 ODS 템플릿을 사용하여 간단한 msoffice2k tagset을 조율하여 Microsoft Outlook을 비롯한 모든 클라이언트에서 안정적으로 렌더링되는 이메일 작성 방법을 보여줍니다.
ods path(prepend) work.template(update); proc template; define style styles.myemail; parent=styles.seaside; class body / htmlstyle="border:none"; class systitleandfootercontainer / htmlstyle="border:none"; class page / htmlstyle="border:none";end; run;
FILENAME OUTPUT EMAIL SUBJECT = "blogs.sas.com: &postCount posts, &commentCount comments" FROM = "Chris Hemedinger <chris.blogger@sas.com>" TO = (&toList) CT ='text/html';
ods tagsets.msoffice2k(id=email) file=OUTPUT(title="7-day blog report") style=myemail; proc report nowd data=pastweek; title "&postCount blogs.sas.com posts"; title2 color=red "NOTE: " color=blue "View counts are sourced from Google Analytics"; columns post_date post_author blog_ID post_link ga_views comment_count ; define post_date / group order=data 'Date posted' style(column)=[just=l]; define post_author / order 'Author' style(column)=[just=l]; ... run; ods tagsets.msoffice2k(id=email) close; |
사용자 정의 템플릿이 포함된 ODS 형식의 이메일
5. SAS에서 파일을 첨부한 이메일을 전송하는 방법
FILENAME EMAIL 명령의 ATTACH= option을 통해 이메일에 하나 이상의 파일을 첨부할 수 있습니다. 첨부파일은 SAS 세션이 메시지에 업로드할 수 있도록 액세스할 수 있는 폴더에 저장되어 있어야 합니다.
filename outbox EMAIL; data _null_; FILE outbox to=("recipient@company.com" ) importance="HIGH" sensitivity="CONFIDENTIAL" subject="Monthly sales: Your report for June" attach=("/home/user/sales/june_sales.xlsx" content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); file outbox; put "Attached is the report for June sales."; put "Thank you,"; put "Sales Data Team"; run; |
이메일 시스템은 첨부된 파일의 유형을 결정하기 위해 파일 확장자와 MIME 유형에 의존합니다. 유형을 정확히 파악하여 설정하려면 ATTACH 옵션의 CONTENT_TYPE= suboption을 통해 프로그램에서 MIME 유형을 지정할 수 있습니다.
이 영상 튜토리얼은 각 메시지에 스프레드시트를 첨부하는 것을 포함하여 다중 수신자에게 이메일 세트를 자동화하는 방법을 보여줍니다.
6. SAS에서 이미지를 포함한 이메일을 보내는 방법
포함된 이미지는 이메일 메시지 본문에 표시되는 특수한 유형의 첨부 파일입니다. 첨부 파일 대신 이미지 데이터가 메시지 본문에 포함되고 이메일 클라이언트(예: Microsoft Outlook 또는 Gmail)에 의해 인라인으로 렌더링됩니다.
ODS HTML5 대상은 HTML 본문에 이미지를 포함할 수 있습니다. 이메일에 사용할 때는 JPEG 또는 PNG 이미지 형태여야합니다. (확장 가능한 벡터 그래픽 또는 SVG는 HTML에서 지원되지만 모든 이메일 클라이언트에서는 지원되지 않습니다.)
ods graphics / imagefmt=png height=400 width=400; filename outbox EMAIL to="chris.h@epa.gov" from="go.green@environment.com" subject="Gas guzzlers" ct="text/html";
ods html5 (id=mail) file=outbox style=pearlj options(bitmap_mode="inline") gtitle; title "CARS data: mpg vs HP"; proc sgplot data=sashelp.cars; scatter x=mpg_city y=horsepower; run; ods html5 (id=mail) close; |
ODS HTML5에서 포함된 이미지의 예시
로고 또는 배너와 같은 포함하려는 독립 실행형 이미지 파일이 있는 경우 고유한 HTML을 빌드하여 이를 직접 참조할 수 있습니다. 코드 스니펫:
filename myemail email to="Jim@acme.com" from="Wiley <wcoyote@acme.com>" sender="Wiley <wcoyote@sas.com>" attach=('C:\Public\Pictures\Sample Pictures\sasLogo.gif' NAME="sasLogo" INLINED="logo" 'C:\temp\reportToEmail.html' NAME='myreport') subject="Embedded Image Example" content_type="text/html"; |
인라인을 포함할 이미지에 이름을 지정하려면 ATTACH option의 INLINE=suboption을 사용하면 됩니다. 이메일이 HTML 콘텐츠 형태라면, 다음을 사용하여 이미지를 참조할 수 있습니다.
<img src="cid:myimage"/> |
여기서 "myimage"는 INLINE 옵션에서 지정한 참조 이름입니다.
FILENAME EMAIL에 대한 SAS 설명서는 인라인 이미지에 대한 예시를 포함하고 있습니다. 자세한 내용과 예제는 이 문서를 참고하시기 바랍니다. SAS를 사용하여 이메일 본문에 그래프 첨부하는 방법
7. SAS에서 여러 명에게 이메일을 전송하는 방법
여러 명에게 이메일을 보내는 두 가지 사용 예시를 보여줍니다.
동일한 메시지를 여러 주소로 보내는 방법
Excel 또는 CSV와 같은 외부 소스에서 발송 리스트를 불러오는 것이 일반적입니다. 이번 예시에서는 일일 발송용과 월요일 정기 발송(더 넓은 배포용)를 보여줍니다. PROC SQL SELECT INTO 기능을 사용하여 FILENAME EMAIL 명령에서 참조할 수 있는 매크로 변수로 주소를 읽어옵니다.
%let cutoff = %sysfunc(today()) - 7; /* two lists: one for Monday and one for all other days */ %let dist = %sysfunc(ifc(%sysfunc(today(),weekday1.)=2,weekly,daily));
filename dl "/u/userid/reports/distlist_&dist..csv"; data distlist; infile dl dsd; length email $ 50; input email; run;
/* create space-delimited list like: "email1" "email2" "email3" */ proc sql noprint; select cat('"',trim(email),'"') into :toList separated by ' ' from distlist; quit;
FILENAME OUTPUT EMAIL SUBJECT = "Report for (%TRIM(%QSYSFUNC(putn(&cutoff., NLDATE20.))) - %TRIM(%QSYSFUNC(today(), NLDATE20.)))" FROM = "Chris Hemedinger <myaddress@sas.com>" TO = (&toList) CT ='text/html'; |
해당 프로세스를 통해 생성된 예시입니다.
여러 주소로 맞춤형 메시지 보내기
SAS 매크로 언어를 통해 재사용 가능한 매크로 루틴을 생성하여 맞춤형 이메일을 전송할 수 있습니다. CALL EXECUTE 명령은 데이터 세트의 각 값에 대해 해당 루틴을 실행하여 사용자 정의 이메일을 생성하는 데이터 기반 프로세스를 생성할 수 있습니다. 코드 세그먼트 예시는 Daniel Rodda가 튜토리얼 영상에서 소개한 샘플을 수정한 것입니다.
%macro sendreports(Email, Make, Model_Count); filename outbox EMAIL; data _null_; FILE outbox to=("&email" ) importance="HIGH" sensitivity="CONFIDENTIAL" subject="NHTSA: &make Recall" file outbox; put "Dear &make.,"; put; put "National Highway Traffic Safety Administration (NHTSA) has identified "; put "&Model_count of your models as having potentially faulty airbags."; put "Thank you,"; put "NHTSA Data Team"; run; %mend sendreports;
/* In this example, car_data contains records for email, make name, and count */ /* Example: safety@ford.com Ford 36 safety@honda.com Honda 27 ... */ data _null_; set car_data; /* will send one email message per record */ call execute(cats('%sendreports(',Email,',',Make,',',Model_Count,')')); run; |
SAS 매크로 및 CALL EXECUTE을 사용하여 데이터 기반 프로세스를 다루는 CALL EXECUTE made easy for SAS data-driven programming를 확인해 보시기 바랍니다.
8. SAS를 통한 문자 메시지 전송 방법
안타깝게도 SAS에는 SMS 메시지를 보내는 마법과 같은 기능 없습니다. 대신, 우리는 휴대폰 서비스 트릭을 활용할 수 있습니다. 대부분의 통신사는 문자 메시지 수신인에 대한 특수 주소 체계를 사용하고 있으며, 이를 기반으로 이메일을 통해 문자 메시지를 보낼 수 있도록 합니다. 통신사 마다 조금씩 다르지만 간단한 인터넷을 통한 문자 메시지 전송에 관련된 자세한 내용을 찾을 수 있습니다.
현재 제가 사용하는 통신사는 AT&T이므로 이메일로 문자 메시지를 받으려면 my_number@txt.att.net 주소로 보내면 됩니다. FILENAME EMAIL 방법을 사용하면 SAS를 사용하여 이메일을 쉽게 보낼 수 있습니다.
options emailhost='mailserver.company.com' emailsys=smtp;
/* NOT my real phone number */ filename msg email to="9198675309@txt.att.net" FROM = "Cafe Bot <youremail@company.com>" subject="Breakfast goodie: &Goodie.";
data _null_; file msg; put 'Bon appetit!'; run; |
다음은 제 핸드폰에서 보낸 문자 메시지입니다.
SAS의 샘플 텍스트 메시지
블로그 포스팅 SAS에서 문자 메시지를 보내는 방법을 통해 자세한 사항을 확인하실 수 있습니다.
9. Gmail 또는 클라우드 기반 서비스를 사용하여 SAS로 이메일을 보내는 방법
SAS를 사용하여 Gmail 및 Outlook.com과 같은 서버와 직접 통신할 수 있지만 이러한 서버 공급 업체는 추가 구성이 필요하며 보안과 관련된 고려할 사항이 더러 존재합니다. 예를 들어 SAS를 Gmail용 클라이언트로 사용하려면 먼저 Google 계정에서 보안 수준이 낮은 앱을 활성화해야 합니다. 2단계 인증을 사용하는 경우 선택한 계정 자격 증명 대신 앱 보안 암호도 사용해야 합니다. 참고: Google 자격 증명 또는 앱 비밀번호를 유지를 철저히 하시기 바랍니다. 이러한 코드를 프로그램에 코딩을 위해 사용하지 않고 사용자만 액세스할 수 있는 저장 공간에 보호하는 것을 추천합니다.
options emailhost= ( "smtp.gmail.com" /* alternate: port=487 SSL */ port=587 STARTTLS auth=plain /* your Gmail address */ id="your_address@gmail.com" /* optional: encode PW with PROC PWENCODE */ pw="your_password" );
filename myemail EMAIL to="lucky_recipient@gmail.com" subject="Read SAS blogs";
data _null_; file myemail; put "Dear Friend,"; put "I recommend that you read https://blogs.sas.com "; put "for lots of SAS news and tips."; run;
filename myemail clear; |
자세한 내용은 Gmail을 사용하여 SAS 프로그램에서 메시지를 보내는 방법 문서를 통해 확인하실 수 있습니다.
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.