SMTP 서버를 통해 이메일 메시지를 보내려면 Send-MailMessage를 사용할 수 있습니다. PowerShell cmdlet. 이 기본 제공 cmdlet을 사용하여 PowerShell 버전 2.0 이상에서 이메일을 보낼 수 있습니다(이전에는 .Net System.Net.Mail
이메일을 보내는 수업). 이 기사에서는 Send-MailMessage
를 사용하는 방법을 보여줍니다. PowerShell 스크립트에서 이메일을 보냅니다.
cmdlet의 구문을 가져오려면 다음 명령을 실행하십시오.
get-help Send-MailMessage
Send-MailMessage [-To] <String[]> [-Subject] <String> [[-Body] <String>] [[-SmtpServer] <String>] [-Attachments <String[]>] [-Bcc <String[]>] [-BodyAsHtml] [-Cc <String[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] -From <String> [-Port <Int32>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>] The Send-MailMessage cmdlet sends an email message from within Windows PowerShell.
주요 옵션은 다음과 같습니다.
- 발신 발신자 주소입니다(SMTP 서버가 발신자의 주소를 확인하지 않고 익명으로 이메일을 보낼 수 있는 경우 실제 smtp 주소를 제공할 필요가 없습니다. 모든 이메일 주소를 대신하여 이메일 메시지를 보낼 수 있음)리>
- 받는 사람 – 수신자 이메일 주소
- SMTP 서버 – 이메일을 보낼 SMTP 서버의 주소입니다.
$PSEmailServer
에 메일 서버 주소를 설정하면 환경 변수를 사용하는 경우 Send-MailMessage cmdlet에 SMTP 서버 주소를 지정할 필요가 없습니다. 다음의 간단한 PowerShell 명령은 지정된 제목과 본문이 포함된 이메일을 여러 수신자에게 보냅니다.
Send-MailMessage -From '[email protected]' -To '[email protected]','[email protected]' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'
cmdlet의 특성을 쉽게 편집할 수 있도록 send email 명령을 다음과 같이 나타낼 수 있습니다.
Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To '[email protected]','[email protected]' `
-From '[email protected]' `
-Subject "Test" `
-Body "Sending email using PowerShell" `
-Encoding 'UTF8'
마지막 명령에서 이메일에 대한 UTF8 인코딩을 추가로 설정했습니다. 그렇지 않으면 이메일 제목이나 본문에 ANSI가 아닌 문자가 포함되어 있으면 잘못 표시됩니다.
기본적으로 ANSI 및 ASCII 인코딩은 Windows PowerShell에서 사용됩니다. PS 버전을 PowerShell Core로 업데이트한 경우 이 버전은 이미 기본적으로 UTF-8 인코딩을 사용하고 있다는 점에 유의하십시오.기본적으로 Send-MailMessage cmdlet은 표준 SMTP 포트 TCP 25를 통해 전자 메일을 보내려고 합니다. SMTP 서버에서 암호화된 프로토콜만 사용하여 전자 메일을 보낼 수 있는 경우 포트 번호를 지정할 수 있습니다(대부분 465 또는 587 ) 및 UseSsl 옵션:
-SmtpServer 'smtp.woshub.com' -Port 465 –UseSsl
이름 | SMTP 서버 주소 | 포트 | 암호화 유형 |
지메일 | smtp.gmail.com | 587 25 465 | TLS TLS SSL |
오피스 365 | smtp.office365.com | 587 | TLS |
Outlook.com | smtp-mail.outlook.com | 587 | TLS |
야후 | smtp.mail.yahoo.com | 587 | TLS |
iCloud 메일 | smtp.mail.me.com | 587 | TLS |
AOL | smtp.aol.com | 465 | SSL |
SMTP 서버가 이메일을 익명으로 보내는 것을 금지하는 경우(릴레이가 거부됨) 다음 오류가 표시됩니다.
5.7.1 Client was not authenticated.
그런 다음 –자격 증명을 사용하여 SMTP 서버에서 인증할 수 있습니다. 옵션.
인증을 위해 대화식으로 사용자 자격 증명을 요청할 수 있습니다.
Send-MailMessage …… -Credential (Get-Credential)
또한 변수에서 인증에 사용할 계정을 지정할 수 있습니다.
$cred = Get-Credential
Send-MailMessage ... -Credential $cred
PowerShell 스크립트에서 직접 SMTP 서버에 연결하기 위한 암호를 저장하려면 다음 구문을 사용하십시오.
$mypasswd = ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("[email protected]", $mypasswd)
Send-MailMessage ... –Credential $mycreds
이메일에 첨부 파일을 추가하려면 –Attachments
를 사용하세요. 옵션. 아래 예에서는 HTML 형식으로 이메일을 보내고 로컬 디스크에서 file1.txt 및 install.log를 첨부합니다. Gmail SMTP 서버를 사용합니다(먼저 Gmail에서 앱 비밀번호를 만들고 Gmail 비밀번호 대신 smtp 인증에 사용해야 함):
$MailMessage = @{
To = "[email protected]"
Bcc = "[email protected]", "[email protected]"
From = "[email protected]"
Subject = "DC Server Report"
Body = "<h1>Welcome!</h1> <p><strong>Generated:</strong> $(Get-Date -Format g)</p>”
Smtpserver = "smtp.gmail.com"
Port = 587
UseSsl = $true
BodyAsHtml = $true
Encoding = “UTF8”
Attachment = “C:\Logs\file1.txt”, “C:\Logs\install.log”
}
Send-MailMessage @MailMessage -Credential $cred
다음은 첨부 파일이 있는 HTML 형식의 이메일이 Gmail 인터페이스에서 어떻게 보이는지 보여줍니다.
-DeliveryNotificationOption
을 사용하여 이메일에 대한 배달 알림(읽음 확인)을 구성할 수 있습니다. . 배달 알림을 사용하면 수신자가 이메일을 받으면 알림을 받을 수 있습니다.
사용 가능한 알림 유형은 다음과 같습니다.
- OnSuccess (배송 성공 시 알림)
- 실패 시 (배송 실패 시 알림)
- 지연 (배송이 지연되는 경우 알림)