Вручную отправлять почту с консоли терминала?
У нас есть класс, который создает и отправляет почтовое сообщение. Я хочу внести некоторые изменения, но перед этим я хочу протестировать некоторые вещи (например, как отображаются URL-адреса). Я пытаюсь вручную отправить сообщение с консоли, но получаю некоторые ошибки. Здесь SendMessage
метод класса:
Method SendMessage(pSubject As %String, pMessage As %String, pEmailAddresses) As %Status
{
set tSC=$$$OK
set tMailMessage=##class(%Net.MailMessage).%New()
do tMailMessage.To.Insert($PIECE(pEmailAddresses,",",1))
for tI=2:1:$LENGTH(pEmailAddresses,",") {
do tMailMessage.Cc.Insert($PIECE(pEmailAddresses,",",tI))
}
set tMailMessage.Subject=pSubject
set tMailMessage.Charset="iso-8859-1"
set tSC=tMailMessage.TextData.Write(pMessage)
quit:'tSC
Set tSC1=..Adapter.SendMail(tMailMessage)
if 'tSC1 {
//Log warning about being unable to send mail.
do $SYSTEM.Status.DecomposeStatus(tSC1,.err)
$$$LOGWARNING("Could not send email: "_err(err))
kill err
}
quit tSC
}
Из терминала я могу создать экземпляр класса MailMessage и установить данные тела, но при попытке отправить я получаю сообщение об ошибке:
USER>set tMailMessage=##class(%Net.MailMessage).%New()
USER>do tMailMessage.To.Insert("me@email.com")
USER>set tSC=tMailMessage.TextData.Write("This is a URL test http://www.google.com, thank you")
USER>set tMailMessage.Subject="This is a test"
USER>set tMailMessage.Charset="iso-8859-1"
USER>set tSC1=..Adapter.SendMail(tMailMessage)
SET tSC1=..Adapter.SendMail(tMailMessage)
^
<NO CURRENT OBJECT>
Как видите, когда я пытаюсь SendMail
это говорит мне NO CURRENT OBJECT
Обновление Я заметил эти строки в верхней части класса:
Parameter ADAPTER = "EnsLib.EMail.OutboundAdapter";
Property Adapter As EnsLib.EMail.OutboundAdapter;
Так я попробовал USER>set tSC1=EnsLib.EMail.OutboundAdapter.SendMail(tMailMessage)
но это привело к <UNDEFINED> *EnsLib
1 ответ
Как мне кажется, вы работаете над Ensemble Service. Но для тестирования вы не должны использовать эти классы. Для отправки электронных писем вы можете использовать %Net.SMTP напрямую. Итак, вместо..Adapter.SendMail используйте этот код
set s=##class(%Net.SMTP).%New()
set s.smtpserver="SMTP server name"
#; if SMTP server needs auth
set auth=##class(%Net.Authenticator).%New() ; use default authentication list
set auth.UserName="myUser"
set auth.Password="myPassword"
set s.authenticator=auth
set status=s.Send(tMailMessage)
if $$$ISERR(status) do $system.OBJ.DisplayError(status)