如何在 Powershell 中对邮件主题进行编码?
How to encode the subject of the mail in Powershell?
我正在尝试使用 Powershell 发送邮件,邮件的主题和正文带有日文字符。邮件发送成功,正文中日文字符正常。但它不适用于主题。我得到 =?iso-2022-jp?Q?=1B=24B=25F=259=25H=1B=28B?=
而不是 テスト
.
有人可以帮我解决这个问题吗?
代码:
$eSubject = "テスト This is subject"
$eBody = "テスト テスト テスト This is body"
$Encode = [Text.Encoding]::GetEncoding("csISO2022JP");
$s64 = [Convert]::ToBase64String($Encode.GetBytes($eSubject), [Base64FormattingOptions]::None)
$Mail = New-Object Net.Mail.MailMessage("From@mail.com","To@mail.com")
$Mail.Subject = [String]::Format("=?{0}?B?{1}?=", $Encode.HeaderName, $s64)
$View = [Net.Mail.AlternateView]::CreateAlternateViewFromString($eBody, $Encode, [Net.Mime.MediaTypeNames]::Text.Plain)
$View.TransferEncoding = [Net.Mime.TransferEncoding]::SevenBit
$Mail.AlternateViews.Add($View)
$SmtpClient = NEW-OBJECT Net.Mail.SmtpClient("localhost","25")
$SmtpClient.Send($Mail)
当使用默认的 CmdLet Send-MailMessage
时,它对我来说工作正常:
$EmailParams = @{
To = 'Destination@domain.com'
From = 'From@domain.com'
Subject = 'テスト This is the subject'
Body = 'テスト This is the body'
SMTPServer = 'YourSMTPServer'
Encoding = 'UTF8'
}
Send-MailMessage @EmailParams
我不知道怎么办。但它现在可以工作了,我只是删除了主题的编码。
代码:
$eSubject = "テスト This is subject"
$eBody = "テスト テスト テスト This is body"
$Encode = [Text.Encoding]::GetEncoding("csISO2022JP");
$Mail = New-Object Net.Mail.MailMessage("From@mail.com","To@mail.com")
$Mail.Subject = $eSubject
$View = [Net.Mail.AlternateView]::CreateAlternateViewFromString($eBody, $Encode, [Net.Mime.MediaTypeNames]::Text.Plain)
$View.TransferEncoding = [Net.Mime.TransferEncoding]::SevenBit
$Mail.AlternateViews.Add($View)
$SmtpClient = NEW-OBJECT Net.Mail.SmtpClient("localhost","25")
$SmtpClient.Send($Mail)
我正在尝试使用 Powershell 发送邮件,邮件的主题和正文带有日文字符。邮件发送成功,正文中日文字符正常。但它不适用于主题。我得到 =?iso-2022-jp?Q?=1B=24B=25F=259=25H=1B=28B?=
而不是 テスト
.
有人可以帮我解决这个问题吗?
代码:
$eSubject = "テスト This is subject"
$eBody = "テスト テスト テスト This is body"
$Encode = [Text.Encoding]::GetEncoding("csISO2022JP");
$s64 = [Convert]::ToBase64String($Encode.GetBytes($eSubject), [Base64FormattingOptions]::None)
$Mail = New-Object Net.Mail.MailMessage("From@mail.com","To@mail.com")
$Mail.Subject = [String]::Format("=?{0}?B?{1}?=", $Encode.HeaderName, $s64)
$View = [Net.Mail.AlternateView]::CreateAlternateViewFromString($eBody, $Encode, [Net.Mime.MediaTypeNames]::Text.Plain)
$View.TransferEncoding = [Net.Mime.TransferEncoding]::SevenBit
$Mail.AlternateViews.Add($View)
$SmtpClient = NEW-OBJECT Net.Mail.SmtpClient("localhost","25")
$SmtpClient.Send($Mail)
当使用默认的 CmdLet Send-MailMessage
时,它对我来说工作正常:
$EmailParams = @{
To = 'Destination@domain.com'
From = 'From@domain.com'
Subject = 'テスト This is the subject'
Body = 'テスト This is the body'
SMTPServer = 'YourSMTPServer'
Encoding = 'UTF8'
}
Send-MailMessage @EmailParams
我不知道怎么办。但它现在可以工作了,我只是删除了主题的编码。
代码:
$eSubject = "テスト This is subject"
$eBody = "テスト テスト テスト This is body"
$Encode = [Text.Encoding]::GetEncoding("csISO2022JP");
$Mail = New-Object Net.Mail.MailMessage("From@mail.com","To@mail.com")
$Mail.Subject = $eSubject
$View = [Net.Mail.AlternateView]::CreateAlternateViewFromString($eBody, $Encode, [Net.Mime.MediaTypeNames]::Text.Plain)
$View.TransferEncoding = [Net.Mime.TransferEncoding]::SevenBit
$Mail.AlternateViews.Add($View)
$SmtpClient = NEW-OBJECT Net.Mail.SmtpClient("localhost","25")
$SmtpClient.Send($Mail)