すごーくニッチな話なんだけど、BizFAXスマートキャストっていうNTTコミュニケーションズが提供してるFAX送受信サービスを使って帳票配信を自動化したいよーなんて相談がありました。
複合機から宛先ごとにFAXを送るのは大変だから、このクラウドFAX基盤からメールでデータ飛ばしてFAXでしか受付してくれないレガシーなお得意様へFAXデータを配信したいと。
このシステム、メールAPIの受け口としてメールにFAX送信先を入力したテキストと配信したい帳票のPDF or TIFFファイルを添付して送れば、その番号へFAXしてくれるらしい。
詳細なカスタマイズはともかく、とりあえず使えそうな感じにサンプルスクリプトだけ用意してみた。
前提として、メーラはOutlookちゃんです。
1カラム目にFAX送信先を入力したテキスト、2カラム目に配信したい帳票パスを入力したCSVファイルを、このvbsファイルにドラッグ&ドロップするとCSVのリストを1行づつ読んでメールをバシバシ飛ばしますよ。
事前にファイルパスの存在確認だけして、無ければエラーログ出力します。
メール飛びまくるから、テストは自己責任でね・・・?
っても、事例がニッチすぎて参考になる人なんていないだろうけどもねぇ?
'■*************************************************************
'■* サンプル ~ BizFAXスマートキャスト Mail to FAX ~
'■* vbsファイルにファイルドロップで受け取ったCSVファイルを
'■* 一行づつ読込、ファイルを添付して、ひたすらメール配信
'■*************************************************************
Dim olk, mailTo, mailSubject, mailBody, Rslt, SendFlg
Dim CSV_Text, CSV_Lines, CSV_Cols
'■■■ CSVファイルリスト取得処理 ■■■
If WScript.Arguments.Count = 1 Then
CSV_File = WScript.Arguments(0)
Else
Msgbox "CSVファイルをドロップして起動して下さい。", vbInformation, "停止 - 起動方法が違います。"
WScript.Quit 0
End If
'■■■ メール関連 初期処理 ■■■
Set olk = CreateObject("Outlook.Application")
mailTo = "test@yizm.work"
mailSubject = "件名サンプル"
mailBody = "#userid=xxxxxx" & vbCrLf & “#passwd=xxxxx”
'■■■ リスト読込処理 ■■■
CSV_Text = Read_TEXT(CSV_File)
CSV_Lines = Split(CSV_Text, vbCrLf)
Rslt = True
For r=1 To UBound(CSV_Lines)
CSV_Cols = Split(Replace(CSV_Lines(r),"""",""), ",")
If UBound(CSV_Cols) = 1 Then
SendFlg = SendMailToFax(CSV_Cols(0), CSV_Cols(1))
Rslt = Rslt AND SendFlg
End If
Next
If Rslt Then
Msgbox "メール送信が完了しました。", vbInformation, "完了 - メールが送信されました。"
Else
Msgbox "送信されなかったメールがあります。" & vbCrLf & "ErrLog_Send_Mail.logを確認して下さい。", vbWarning, "警告 - 配信されなかったメールがあります。"
End If
'■■■ メール関連 終了処理 ■■■
Set olk = Nothing
WScript.Quit 0
'■■■ 以下、呼び出し関数 ■■■
'■ 呼び出し関数 - メール送信
Function SendMailToFax(mailAttach1, mailAttach2)
Dim item, objFS
If File_Exists2(mailAttach1, mailAttach2) Then
Set item = olk.CreateItem(0)
item.To = mailTo
item.Subject = mailSubject
item.Body = mailBody
item.Attachments.Add mailAttach1
item.Attachments.Add mailAttach2
'item.Display
item.Send
Set item = Nothing
SendMailToFax = True
Else
SendMailToFax = False
End If
End Function
'■ 呼び出し関数 - テキスト読込
Function Read_TEXT(FilePath)
Dim objFS, objTXT, Rslt
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(FilePath) Then
Set objTXT = objFS.OpenTextFile(FilePath, 1)
Rslt = objTXT.ReadAll()
objTXT.close
Set objTXT = Nothing
Else
Rslt = ""
End If
Set objFS = Nothing
Read_TEXT = Rslt
End Function
'■ 呼び出し関数 - テキスト追記
Function Append_TEXT(ContentStr, FilePath)
Dim objFS, objTXT
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTXT = objFS.OpenTextFile(FilePath, 8, True)
objTXT.WriteLine ContentStr
objTXT.close
Set objTXT = Nothing
Set objFS = Nothing
End Function
'■ 呼び出し関数 - ファイル存在確認
Function File_Exists2(mailAttach1, mailAttach2)
Dim objFS, flg1, flg2, ErrPath
Set objFS = CreateObject("Scripting.FileSystemObject")
ErrPath = objFS.GetParentFolderName(WScript.ScriptFullName) & "\ErrLog_Send_Mail.log"
flg1 = objFS.FileExists(mailAttach1)
flg2 = objFS.FileExists(mailAttach2)
If Not flg1 Then Append_TEXT Now & ",ファイルが存在しませんでした。(" & mailAttach1 & ")", ErrPath
If Not flg2 Then Append_TEXT Now & ",ファイルが存在しませんでした。(" & mailAttach2 & ")", ErrPath
File_Exists2 = flg1 AND flg2
End Function
たとえば、こんなCSVをドロップすればメールがビュンビュン飛ぶわけだ。
宛先リスト,帳票パス "C:\Temp\attach_sample\address_3.txt","C:\Temp\attach_sample\aws_associate.pdf" "C:\Temp\attach_sample\address_4.txt","C:\Temp\attach_sample\aws_associate.pdf"