Evernoteにメールで画像付きのHTMLファイルを投稿するスクリプトを書いてみました。
このスクリプトを元に、以前から作りたかったWebサイトからHTMLファイルと画像ファイルをダウンロードしメールでEvernoteにノートとして送信するスクリプトを作ることが出来ました。EvernoteのWeb Clipperをローカルなスクリプトで実行するイメージですが、Webページのリンクをたどって関連ページを一気にEvernoteのノート化することが出来ます。自分の使い方はそんな感じですが、マルチパートメールはEvernoteに限らず色々な場面で使えそうです。
<#
.SYNOPSIS
Yahooのメールアカウントからマルチパートメールを送信する。
<CommonParameters> はサポートしていません
.DESCRIPTION
説明
.EXAMPLE
使い方
.PARAMETER $UserName
Yahooアカウントのユーザー名
.PARAMETER $Password
Yahooアカウントのパスワード
.PARAMETER $ToEMailAddress
メール送信先のメールアドレス
.PARAMETER $Subject
メールの件名
.PARAMETER $Body
メールの本文、HTMLで記述。
画像リンクは<img src='cid:dbs1'>と記述し1は$ImageFileの0番目の要素を参照する。
.PARAMETER $ImageFile
画像ファイルのパスを配列で渡す。
#>
function Send-YahooMultipartMail
{
param(
[string]
$UserName,
[string]
$Password,
[string]
$ToEMailAddress,
[string]
$Subject,
[string]
$Body,
[string[]]
$ImageFile
)
begin {
$Smtp = New-Object Net.Mail.SmtpClient("smtp.mail.yahoo.co.jp", 587)
$Smtp.EnableSsl = $false
$Smtp.Credentials = New-Object Net.NetworkCredential(
$UserName,
$Password
)
}
process {
# 件名JIS->Base64
$enc = [System.Text.Encoding]::GetEncoding("iso-2022-jp")
$str2 = $Subject | % {
$s = $_
(1..2) | % {
$s = [Convert]::ToBase64String($enc.GetBytes($s))
$s = ("=?{0}?B?{1}?=" -f "iso-2022-jp", $s)
}
$s
}
$Mail = New-Object Net.Mail.MailMessage(
"${UserName}@yahoo.co.jp",
$ToEMailAddress,
$str2,
""
)
$v = [System.Net.Mail.AlternateView]::CreateAlternateViewFromString(
$Body,
$null,
[System.Net.Mime.MediaTypeNames+Text]::Html)
$AlternateView = $v
$Resource = @()
for($i=0;$i -lt $ImageFile.Count; $i++) {
$Extension = [System.IO.Path]::GetExtension($ImageFile[$i])
$RegPath = "Registry::HKCR\${Extension}"
$Mime = ""
if (Test-Path -Path $RegPath) {
$Mime = (Get-Item -Path $RegPath).GetValue("Content Type")
}
$Resource += New-Object System.Net.Mail.LinkedResource(
$ImageFile[$i],
$Mime
)
$Resource[$i].ContentId = "dbs"+ ($i+1)
$AlternateView.LinkedResources.Add($Resource[$i])
}
$Mail.AlternateViews.Add($AlternateView)
$Smtp.Send($mail)
$Resource | % { $_.Dispose() }
$AlternateView.Dispose()
$Mail.Dispose()
}
end {
$Smtp.Dispose()
}
}
if (-not($MyInvocation.PSCommandPath)) {
$body = @'
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h2>テーブル</h2>
<table>
<thead>
<th>項目1</th>
<th>項目2</th>
</thead>
<tbody>
<th>値1</th>
<th>値2</th>
</tbody>
</table>
<hr>
<h2>画像の埋め込み</h2>
<h3>トリミング前</h3>
<img src='cid:dbs1'>
<h3>トリミング後</h3>
<img src='cid:dbs2'>
</body>
</html>
'@
$img = @(
'C:\P_20190914_063523_1.jpg'
'C:\P_20190914_063523_1_trim.jpg'
)
$usr = "UserName" # Yahooユーザ名
$pass = "Password" # Yahooパスワード
$to = "user@email.com" # 送信先メアド
$sub = "マルチパートメールのサンプル" # 件名
Send-YahooMultipartMail $usr $pass $to $sub $Body $img
} # if
コメント