代码之家  ›  专栏  ›  技术社区  ›  THE JOATMON

是否从终端控制台手动发送邮件?

  •  0
  • THE JOATMON  · 技术社区  · 9 年前

    我们有一个构建并发送邮件消息的类。我想做一些更改,但在做之前,我想测试一些东西(比如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 回复  |  直到 9 年前
        1
  •  2
  •   DAiMor    9 年前

    就像我认为你在为合奏服务工作一样。但是对于测试,您不应该使用这些类。对于发送电子邮件,您可以使用 %Net.SMTP 直接地 所以,代替…适配器。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)
    
    推荐文章