Top > OOoBasic > Generic > SendingMail

*メールの送信 [#p8f80733]
com.sun.star.mail.MailServer サービスを利用するとメールを送信するプログラムなしでメールを送信できます。しかし、com.sun.star.mail.MailMessage サービスが OOo Basic からうまく利用できないため、メールが送信できません。

3.3 から com.sun.star.mail.MailMessage サービスが標準で実装されたため拡張機能なしでメールを送信できるようになりました。[[i111508>http://www.openoffice.org/issues/show_bug.cgi?id=111508]]

上記のサービスを利用してメールを OOo Basic から送信するには追加のサービスが必要になります。[[MailMessage>OOoPython/MailMessage]]

拡張機能による追加サービスを利用してメールのメッセージを作成、メールを送信します。

#contents

**送信 [#i0ea890a]
上記拡張機能によるメールメッセージサービス mytools.mail.MailMessage をインスタンス化してメールの送信に必要な情報を設定します。

メールを送信するサービスは MailServiceProvider サービスからメールサーバーのタイプを指定して作成します。ここではメールを送信するためにタイプを SMTP としています。

サーバーへの接続時には、サーバーの情報および認証情報が必要です。それぞれ com.sun.star.uno.XCurrentContext および com.sun.star.mail.XAuthenticator インターフェースを利用します。これらはリスナーで代用します。接続のタイプは Insecure および Ssl が利用できます。

メールの内容は com.sun.star.datatransfer.XTransferable インターフェースが必要です。これもリスナーを利用して作成します。mailmerge.py の PyMailSMTPService クラスの sendMailMessage メソッドを見ると、getTransferDataFlavors メソッドの返り値の最初の DataFlavor でメッセージのテキストを取得しようとするので最初のものを utf-8 のテキストを渡すようにします。(あとで utf-8 に変換されますが、OOo Basic の内部文字コードは utf-8 なので相性は悪くありません。)


#code(ob){{
Private sMailBody As String

sub SendingMail_1
  sMailSenderAddress = "user@hogehoge.ne.jp"
  sMailSenderName = "User"
  sRecipient = "recip@honyohonyo.ne.jp"
  sSubject = "Mail subject"
  sMailBody = "Mail send test."
  
  oMailBody = CreateUnoListener( "MailBody_", _
      "com.sun.star.datatransfer.XTransferable" )
  
  oMessage = CreateUnoService("mytools.mail.MailMessage2")
  
  With oMessage
    .setSenderAddress( sMailSenderAddress )
    .setSenderName( sMailSenderName )
    .addRecipient( sRecipient )
    .setSubject( sSubject )
    .setBody( oMailBody )
  End With
  
  oConnectionContext = CreateUnoListener( "ConnectionContext_", _
      "com.sun.star.uno.XCurrentContext" )
  oAuthenticator = CreateUnoListener( "Authenticator_", _
      "com.sun.star.mail.XAuthenticator" )
  oMSP = CreateUnoService( "com.sun.star.mail.MailServiceProvider" )
  oMailService = oMSP.create( com.sun.star.mail.MailServiceType.SMTP )
  oMailService.connect( oConnectionContext, oAuthenticator)
  
  If oMailService.isConnected() Then
    On Error GoTo Handler
      oMailService.sendMailMessage( oMessage )
      oMailService.disconnect()
  Else
    msgbox "Faild to connect to the server."
  End If
  
  Exit Sub
  Handler:
    oMailService.disconnect()
    msgbox "Faild to send the mail." & chr(10) & _
        Error
end sub

Function MailBody_getTransferData( aF )
  If aF.MimeType = "text/plain;charset=utf-8" Then
    MailBody_getTransferData = sMailBody
  Else
    MailBody_getTransferData = nothing
  End If
End Function
Function MailBody_getTransferDataFlavors()
  aF = CreateUnoStruct( "com.sun.star.datatransfer.DataFlavor" )
  aF.MimeType = "text/plain;charset=utf-8"
  MailBody_getTransferDataFlavors = Array( aF )
End Function
Function MailBody_isDataFlavorSupported( aF )
  If aF.MimeType = "text/plain;charset=utf-8" Then
    MailBody_isDataFlavorSupported = True
  Else
    MailBody_isDataFlavorSupported = False
  End If
End Function

Function ConnectionContext_getValueByName( sName As String )
  Dim vRetValue As Variant
  Select Case sName
  Case "Port"
    vRetValue = 587'25
  Case "ServerName"
    vRetValue = "hogehoge.ne.jp"
  Case "ConnectionType"
    vRetValue = "Insecure"
  End Select  
  ConnectionContext_getValueByName = vRetValue
End Function

Function Authenticator_getUserName() As String
  Authenticator_getUserName = "user@hogehoge.ne.jp"
End Function
Function Authenticator_getPassword() As String
  Authenticator_getPassword = "userpassword"
End Function
}}

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes