Отправка электронной почты с сервера AOS

Я пытаюсь отправить электронное письмо на основе некоторых событий, инициированных пользователями в их клиенте. Я не хочу, чтобы электронная почта отправлялась с клиента (поскольку это потребовало бы, чтобы мы разрешили практически каждой рабочей станции в домене использовать службу SMTP), а скорее с сервера AOS.

Я подумал о создании класса, который расширял бы RunBaseBatch и использовал в нем SysMailer.

Вот что у меня есть до сих пор.

class Batch_Mailer extends RunBaseBatch
{
    str subject;
    str body;
    str fromName;
    str fromAddress;
    str toAddress;
    str smtpServer;

    void new(str _subject, str _body, str _fromName, str _fromAddress, str _toAddress)
    {
        subject = _subject;
        body = _body;
        fromName = _fromName;
        fromAddress = _fromAddress;
        toAddress = _toAddress;
        smtpServer = 'mail.domain.ca';
        super();
    }

    public boolean canGoBatchJournal()
    {
        return true;
    }

    public void run()
    {
        SysMailer mail;
        ;

        super();
        try
        {
            mail = new SysMailer();

            mail.fromAddress(fromAddress, fromName);
            mail.SMTPRelayServer(smtpServer);
            mail.tos().appendAddress(toAddress);
            mail.htmlBody(strfmt(body));
            mail.subject(subject);
           mail.sendMail();
        }
       catch
       {
           //Log something maybe, but nice if the infolog would not pop up... 

       }
    }

}

Вот как я его использую:

Batch_Mailer mail;
mail = new Batch_Mailer("Subject.", strfmt("@VDX488", vendTable.AccountNum, curUserId()), "AX Alerts", 
        "[email protected]", "[email protected]"

К сожалению, похоже, это работает в клиенте. Если я запускаю код на виртуальной машине dev box, на которой есть сервер AOS (который может использовать службу SMTP), электронная почта срабатывает, но не в том случае, если я запускаю ее в клиенте на своем физическом компьютере (которому не разрешено использовать SMTP). услуга).

Я думал, что расширение RunBaseBatch и переопределение run сделают это, но, видимо, нет. Любые идеи ?

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

Спасибо!


person Francis Ducharme    schedule 28.02.2014    source источник


Ответы (2)


Расширение RunBaseBatch не означает, что он всегда выполняется на уровне сервера — где фактически выполняется код, зависит от того, где находится объект.

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

Пример:

public static server Batch_Mailer newOnServer(
    str _subject, 
    str _body, 
    str _fromName, 
    str _fromAddress, 
    str _toAddress)
{
    ;
    return new Batch_Mailer(_subject, _body, _fromName, _fromAddress, _toAddress);
}

После этого вам просто нужно вызвать этот статический метод вместо прямого использования new:

mail = Batch_Mailer::newOnServer("Subject.", strfmt("@VDX488" ...
mail.run();
person DAXaholic    schedule 01.03.2014
comment
Спасибо. Я думаю, что мне нужно будет использовать что-то вроде RunAsPermission, потому что даже при запуске этого кода с пользователем, который имеет довольно большой доступ к системе, я получаю такие ошибки, как Request for the permission of type 'InteropPermission' failed. - person Francis Ducharme; 03.03.2014
comment
Это исправило это: ax-live.blogspot.ca/2009/09/ - person Francis Ducharme; 03.03.2014

Ответ DAXaholic является точным ответом на ваш вопрос, но, возможно, вам следует подумать об использовании встроенной платформы AX для отправки электронных писем вместо того, чтобы кодировать свой собственный метод. Я полагаю, у вас будет меньше проблем в будущем и более простой путь обновления до версии 2012+.

Смотрите мой пост в блоге:

http://alexondax.blogspot.com/2013/09/how-to-properly-send-emails-with-built.html

person Alex Kwitny    schedule 03.03.2014