


Powershellを使用してメール送信を行う方法
Sending mail with PowerShell
http://www.philerb.com/2011/11/sending-mail-with-powershell/
PowerShell version 2からはSend-MailMessage cmdletが用意されています
1 |
PS C:\> Send-MailMessage -To test-id1@rootlinks.net -From test-id2@rootlinks.net -Subject test -Body "test mail" -SmtpServer smtp.rootlinks.net |
文字コードはデフォルトでus-asciiになります
1 2 3 4 5 6 7 |
MIME-Version: 1.0 From: test-id2@rootlinks.net To: test-id1@rootlinks.net Date: 14 Sep 2013 18:05:56 +0900 Subject: =?us-ascii?Q?test?= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable |
このままで日本語メールを送信すると当然文字化けになります
1 |
PS C:\> Send-MailMessage -To test-id1@rootlinks.net -From test-id2@rootlinks.net -Subject "これはテストメールです" -Body "日本語の本文" -SmtpServer smtp.rootlinks.net |
1 2 3 4 5 6 7 8 9 |
MIME-Version: 1.0 From: test-id1@rootlinks.net To: test-id2@rootlinks.net Date: 14 Sep 2013 18:26:59 +0900 Subject: =?us-ascii?Q?????????????= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable ?????? |
ヘルプを確認すると-Encodingというパラメータが用意されていました
-Encoding <Encoding>
本文と件名に使用されるエンコードを指定します。有効な値は、ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、Default、および OEM です。ASCII が既定値です。
ISO-2022-JPが無いのでUTF-8を使用します
1 2 3 4 5 6 7 8 |
PS C:\> Send-MailMessage -To test-id1@rootlinks.net -From test-id2@rootlinks.net -Subject "これはテストメールです" -Body "日本語の文章" -SmtpServer smtp.rootlinks.net -Encoding UTF8 Send-MailMessage : パラメーター 'Encoding' をバインドできません。"UTF8" の値を "System.String" 型から "System.Text.Enco ding" 型に変換できません。 発生場所 行:1 文字:152 + Send-MailMessage -To test-id1@rootlinks.net -From test-id2@rootlinks.net -Subject "これはテストメールです" -Body "日本語の文章" -SmtpServer smtp.rootlinks.net -Encoding <<<< UTF8 + CategoryInfo : InvalidArgument: (:) [Send-MailMessage]、ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SendMailMessage |
あれ? エラーで送信できません。他のエンコードも試したのですがすべてエラーになります
Send-MailMessage : パラメーター ‘Encoding’ をバインドできません。”UTF8″ の値を “System.String” 型から “System.Text.Encoding” 型に変換できません
調べたらありました。同じように悩む人がいるのにちょっと嬉しかった(^^
Send-MailMessage cmdlet not allowing me to set -encoding
http://social.technet.microsoft.com/Forums/windowsserver/en-US/373eb9b2-33b8-40a2-9b47-07c20b0d1b30/sendmailmessage-cmdlet-not-allowing-me-to-set-encoding
[System.Text.Encoding]::を使えとあるので試して見ます
1 |
PS C:\> Send-MailMessage -To test-id1@rootlinks.net -From test-id2@rootlinks.net -Subject "これはテストメールです" -Body "日本語の本文" -SmtpServer smtp.rootlinks.net -Encoding ([System.Text.Encoding]::UTF8) |
UTF8で送信されて取り敢えず読めるようになりました
1 2 3 4 5 6 7 |
MIME-Version: 1.0 From: tet-id1@rootlinks.net To: test-id2@rootlinks.net Date: 14 Sep 2013 18:27:09 +0900 Subject: =?utf-8?B?44GT44KM44Gv44OG44K544OI44Oh44O844Or44Gn44GZ?= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 |
このSend-MailMessage cmdletですがsmtp portの変更ができません。標準のPort25の場合はいいのですが、ポートが変更になっていると使えないのがちょっと残念です
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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
PS C:\> Get-Help Send-MailMessage -full 名前 Send-MailMessage 概要 電子メール メッセージを送信します。 構文 Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [- Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNot ificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] [-Priority {Normal | Low | H igh}] [-UseSsl] [<CommonParameters>] 説明 Send-MailMessage コマンドレットは、Windows PowerShell 内から電子メール メッセージを送信します。 パラメーター -Attachments <string[]> 電子メール メッセージに添付するファイルのパスとファイル名を指定します。このパラメーターを使用するか、パイプを使 用して、パスとファイル名を Send-MailMessage に渡すことができます。 必須 false 位置 named 既定値 パイプライン入力を許可する true (ByValue) ワイルドカード文字を許可する false -Bcc <string[]> メールのコピーを受信するがメッセージの受信者一覧には含めない電子メール アドレスを指定します。"Name <someone@exa mple.com>" のように、名前 (オプション) と電子メール アドレスを入力します。 必須 false 位置 named 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -Body <string> 電子メール メッセージの本文 (内容) を指定します。 必須 false 位置 3 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -BodyAsHtml [<SwitchParameter>] HTML が Body パラメーターの値に含まれていることを示します。 必須 false 位置 named 既定値 False パイプライン入力を許可する false ワイルドカード文字を許可する false -Cc <string[]> 電子メール メッセージのカーボン コピー (CC) が送信される電子メール アドレスを指定します。"Name <someone@example .com>" のように、名前 (オプション) と電子メール アドレスを入力します。 必須 false 位置 named 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -Credential <PSCredential> この処理を実行するアクセス許可を持つユーザー アカウントを指定します。既定値は現在のユーザーです。 "User01" や "Domain01\User01" などユーザー名を入力します。または、Get-Credential コマンドレットで返されるような PSCredential オブジェクトを入力します。 必須 false 位置 named 既定値 現在のユーザー パイプライン入力を許可する false ワイルドカード文字を許可する false -DeliveryNotificationOption <DeliveryNotificationOptions> 電子メール メッセージの配信通知オプションを指定します。複数の値を指定できます。"None" が既定値です。このパラメ ーターのエイリアスは "dno" です。 配信通知は、To パラメーターの値で指定したアドレスに電子メール メッセージで送信されます。 有効な値は次のとおりです。 -- None: 通知なし。 -- OnSuccess: 配信が成功した場合に通知します。 -- OnFailure: 配信が失敗した場合に通知します。 -- Delay: 配信が遅れた場合に通知します。 -- Never: 通知しません。 必須 false 位置 named 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -Encoding <Encoding> 本文と件名に使用されるエンコードを指定します。有効な値は、ASCII、UTF8、UTF7、UTF32、Unicode、BigEndianUnicode、 Default、および OEM です。ASCII が既定値です。 必須 false 位置 named 既定値 ASCII パイプライン入力を許可する false ワイルドカード文字を許可する false -From <string> メールの送信元のアドレスを指定します。"Name <someone@example.com>" のように、名前 (オプション) と電子メール ア ドレスを入力します。このパラメーターは必須です。 必須 true 位置 named 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -Priority <MailPriority> 電子メール メッセージの優先度を指定します。有効な値は、Normal、High、および Low です。Normal が既定値です。 必須 false 位置 named 既定値 Normal. パイプライン入力を許可する false ワイルドカード文字を許可する false -SmtpServer <string> 電子メール メッセージを送信する SMTP サーバーの名前を指定します。 既定値は、$PSEmailServer 設定変数の値です。この設定変数を設定せず、このパラメーターを省略した場合、このコマンド は実行されません。 必須 false 位置 4 既定値 $PSEmailServer パイプライン入力を許可する false ワイルドカード文字を許可する false -Subject <string> 電子メール メッセージの件名を指定します。このパラメーターは必須です。 必須 true 位置 2 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -To <string[]> メールの送信先のアドレスを指定します。"Name <someone@example.com>" のように、名前 (オプション) と電子メール ア ドレスを入力します。このパラメーターは必須です。 必須 true 位置 1 既定値 なし パイプライン入力を許可する false ワイルドカード文字を許可する false -UseSsl [<SwitchParameter>] Secure Sockets Layer (SSL) プロトコルを使用して、メールを送信するリモート コンピューターとの接続を確立します。 既定では、SSL は使用されません。 必須 false 位置 named 既定値 False パイプライン入力を許可する false ワイルドカード文字を許可する false <CommonParameters> このコマンドレットは、次の共通パラメーターをサポートします: Verbose、 Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、 OutBuffer、および OutVariable。詳細については、 「get-help about_commonparameters」と入力してヘルプを参照してください。 入力 System.String パイプを使用して添付ファイルのパスとファイル名を Send-MailMessage に渡すことができます。 出力 なし このコマンドレットは出力を生成しません。 メモ -------------------------- 例 1 -------------------------- C:\PS>send-mailmessage -to "User01 <user01@example.com>" -from "User02 <user02@example.com>" -subject "Test mail" 説明 ----------- このコマンドは、電子メール メッセージを User01 から User02 に送信します。 このメール メッセージには、件名 (必須) はありますが、本文 (オプション) はありません。また、SmtpServer パラメーター が指定されていないので、Send-MailMessage は SMTP サーバーの $PSEmailServer 設定変数の値を使用します。 -------------------------- 例 2 -------------------------- C:\PS>send-mailmessage -from "User01 <user01@example.com>" -to "User02 <user02@example.com>", "User03 <user03@examp le.com>" -subject "Sending the Attachment" -body "Forgot to send the attachment. Sending now." -Attachment "data.cs v" -priority High -dno onSuccess, onFailure -smtpServer smtp.fabrikam.com 説明 ----------- このコマンドは、添付ファイル付きの電子メール メッセージを、User01 から他の 2 人のユーザーに送信します。 また、優先度の値を "High" に指定し、電子メール メッセージの着信成功または着信失敗の配信通知を要求します。 -------------------------- 例 3 -------------------------- C:\PS>send-mailmessage -to "User01 <user01@example.com>" -from "ITGroup <itdept@example.com>" -cc "User02 <user02@e xample.com>" -bcc ITMgr <itmgr@example.com> -subject "Don't forget today's meeting!" -credential domain01\admin01 - useSSL 説明 ----------- このコマンドは、送信者が User01、受信者が ITGroup メーリング リスト、コピー (CC) の宛先が User02、ブラインド カーボ ン コピー (BCC) の宛先が IT マネージャー (ITMgr) である電子メール メッセージを送信します。 また、このコマンドはドメイン管理者の資格情報と UseSSL パラメーターを使用します。 |