Top > OOoBasic > Generic > SendingMail

メールの送信 Edit

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

3.3 から com.sun.star.mail.MailMessage サービスが標準で実装されたため拡張機能なしでメールを送信できるようになりました。i111508

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

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

送信 Edit

上記拡張機能によるメールメッセージサービス 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 なので相性は悪くありません。)

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
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