スクレイピングの結果を即知りたいというのはよくある話。
Apiを使って結果を登録するのがいいのですが・・
「今日中に」とかいきなり言われると、社内ツールのアカウント手続きとか間に合わなくて。
そんな場合は自分のメールアドレスを使い結果を送信します。
自分の会社はさくらのレンタルサーバーをつかっているのですが、メールの設定がさくらのレンタルサーバーになっている記事が少なかったのでこちらにメモします。
VBAを使ってメールを送信するには以下のサイトが詳しくてわかりやすいです。
ほぼ下記のサイトそのままなのですがさくらのレンタルサーバー用にアレンジしました。
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
※上のサイトでMicrosoft CDO for Windows 2000 Libraryの参照設定をしたら下の関数が使えるはずです。
※smtpサーバーなどメールの設定がわからないという場合はoutlookなどメーラの設定を参考にするとできます。
vba
'*******************************************************************************
'メールを送信する さくらのレンタルサーバー使用
'-------------------------------------------------------------------------------
' 引渡値 = ①メール件名
' ②メール本文
' ③送信先メールアドレス
' 戻り値=エラーなし true エラー false プログラム的にエラーがあるかないかだけで実際に届くかどうかは別
' 参考= https://help.sakura.ad.jp/206206021/
' http://mofuken.blogspot.com/2014/07/windows-cdomessage.html
' http://hiroses.seesaa.net/article/365310670.html
'*******************************************************************************
Function SendSakuraMail(kenmei As String, mozi As String, address As String) As Boolean
Dim objCDO As New CDO.Message
On Error GoTo Errlabel 'エラー処理
With objCDO
With .Configuration.Fields
.Item(cdoSMTPServer) = "ここにSMTPサーバー名を記入"
.Item(cdoSendUsingMethod) = cdoSendUsingPort
.Item(cdoSMTPServerPort) = 587 '送信サーバーのポート番号
.Item(cdoSMTPConnectionTimeout) = 15 'タイムアウト
.Item(cdoSMTPAuthenticate) = cdoBasic 'SMTP認証
.Item(cdoSMTPUseSSL) = False 'SSL
.Item(cdoSendUserName) = "ここに送信元ユーザーのメールアドレスを記入"
.Item(cdoSendPassword) = "ここに送信元ユーザーのパスワードを記入"
.Item(cdoLanguageCode) = CdoCharset.cdoShift_JIS '文字セット指定
.Update '設定を更新
End With
With .Fields
'重要度、通常は以下のどちらかで良いでしょう
.Item("urn:schemas:mailheader:X-Priority") = 1
.Item("urn:schemas:mailheader:X-MsMail-Priority") = "High"
.Update '設定を更新
End With
.MDNRequested = False '開封確認
.MimeFormatted = True 'MIMEを使って書式設定
.From = "送信元ユーザーのメールアドレス"
.To = address '関数の引数で受け取った送信先
.CC = "CCに付け加えたいメールアドレス"
.subject = kenmei '関数の引数で受け取った件名
.TextBody = mozi '関数の引数で受け取ったメール本文
.Send '送信
End With
Set objCDO = Nothing
SendSakuraMail = True
Exit Function
Errlabel:
SendSakuraMail = False '何かしらのエラーの場合はfasleをreturanする
End Function
SSLの部分をfalseにしてみたり、ポート番号をいろりろ調整し、やっと送信できました。
このままできなかったら間に合わないと焦っていたのでできてよかったです。