メールの送信 
com.sun.star.mail.MailServer サービスを利用するとメールを送信するプログラムなしでメールを送信できます。しかし、com.sun.star.mail.MailMessage サービスが OOo Basic からうまく利用できないため、メールが送信できません。
3.3 から com.sun.star.mail.MailMessage サービスが標準で実装されたため拡張機能なしでメールを送信できるようになりました。i111508
上記のサービスを利用してメールを OOo Basic から送信するには追加のサービスが必要になります。MailMessage
拡張機能による追加サービスを利用してメールのメッセージを作成、メールを送信します。
送信 
上記拡張機能によるメールメッセージサービス 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
|