Макрос для отправки электронной почты

мой код для отправки почты с использованием шага данных 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;

person Apache11    schedule 21.01.2016    source источник
comment
Не могли бы вы переформулировать свой вопрос? Я не уверен, чего вы пытаетесь достичь.   -  person Vasilij Nevlev    schedule 21.01.2016
comment
Макрос, который будет отправлять электронную почту. используя имя файла   -  person Apache11    schedule 21.01.2016
comment
Предполагая, что ваш шаг данных работает, вы можете просто обернуть его в макрос, я покажу это в своем ответе.   -  person Vasilij Nevlev    schedule 21.01.2016
comment
В чем проблема? Ваш вопрос совершенно не ясен.   -  person Robert Penridge    schedule 27.01.2016


Ответы (2)


Я обычно не включаю параметры электронной почты в сам шаг данных, а скорее в ссылку на файл. Я протестировал приведенный ниже код с моим адресом электронной почты, и он сработал.

Как я сказал в комментариях, вам просто нужно обернуть свой шаг данных в макрос, если вы хотите, чтобы он выполнялся внутри макроса.

У вас могут быть позиционные или ключевые параметры. См. этот источник для получения подробной информации. В этом примере я использовал параметры ключевого слова. вы вызываете макрос, указав ключевое слово, а затем значение, как я показал последнюю строку. Если вы ничего не ставите, то ключевое слово игнорируется.

Кстати, пустые ключевые слова приводят к инициализации локальных макропеременных. Операторы 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 protected]);
person Vasilij Nevlev    schedule 21.01.2016
comment
Я изменил свой ответ, чтобы показать, как вы можете использовать параметры ключевого слова для макроса. Я не знаю об ошибке для шифра. В моем последнем примере неправильно использовались двойные кавычки. Это могло вызвать ошибку или может быть связано с тем, как вы подключаетесь к smtp-серверу, который потенциально может быть в вашей конфигурации. - person Vasilij Nevlev; 21.01.2016
comment
Поиск в Google «Невозможно создать шифр» приводит к этому сообщению в блоге от Криса, где проблема обсуждается в комментариях. Похоже, это потенциально связано с SAS/secure... blogs.sas.com/content/sasdummy/2013/07/31/ - person Quentin; 21.01.2016
comment
@ quentin @Vasoliji я читал блог, но теперь у меня эта ошибка-> ОШИБКА: Хост электронной почты FILENAME не найден. и почему вы использовали несколько = = в выражении % let? - person Apache11; 21.01.2016
comment
Привет, Пиюш, это не двойной знак равенства. В этом примере (FROM=FROM=&FROM) первое из — это имя макропеременной, которой я присваиваю значение FROM=, а также значение параметра &FROM. Что касается вашей проблемы с хостом электронной почты, работал ли ваш исходный шаг данных? Можете ли вы проверить, правильно ли установлена ​​системная опция EMAILHOST= в вашем экземпляре? - person Vasilij Nevlev; 22.01.2016
comment
Кстати, чтобы проверить опцию EMAILHOST, вы должны запустить этот код: PROC OPTIONS option=EMAILHOST; БЕЖАТЬ; Проверьте свой журнал, вы должны увидеть значение параметра вашего почтового хоста, что-то вроде smtp.gmail.com - person Vasilij Nevlev; 22.01.2016

Пейюш,

Попробуйте пример кода ниже. Обязательно введите данные своего хоста электронной почты 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;
person Keneni    schedule 27.01.2016