Computer >> 컴퓨터 >  >> 체계 >> Windows Server

Send-MailMessage:PowerShell에서 이메일 보내기

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.

Send-MailMessage:PowerShell에서 이메일 보내기

주요 옵션은 다음과 같습니다.

  • 발신 발신자 주소입니다(SMTP 서버가 발신자의 주소를 확인하지 않고 익명으로 이메일을 보낼 수 있는 경우 실제 smtp 주소를 제공할 필요가 없습니다. 모든 이메일 주소를 대신하여 이메일 메시지를 보낼 수 있음)
  • 받는 사람 – 수신자 이메일 주소
  • SMTP 서버 – 이메일을 보낼 SMTP 서버의 주소입니다.
$PSEmailServer에 메일 서버 주소를 설정하면 환경 변수를 사용하는 경우 Send-MailMessage cmdlet에 SMTP 서버 주소를 지정할 필요가 없습니다.

다음의 간단한 PowerShell 명령은 지정된 제목과 본문이 포함된 이메일을 여러 수신자에게 보냅니다.

Send-MailMessage -From 'ps-script@woshub.com' -To 'serveradmin@woshub.com','helpdesk@woshub.com' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'

cmdlet의 특성을 쉽게 편집할 수 있도록 send email 명령을 다음과 같이 나타낼 수 있습니다.

Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To 'serveradmin@woshub.com','helpdesk@woshub.com' `
-From 'ps-script@woshub.com' `
-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

아래 표는 PowerShell에서 메시지를 보내는 데 사용할 수 있는 널리 사용되는 공용 이메일 공급자의 SMTP 서버 매개변수를 보여줍니다(계정 인터페이스에서 SMTP를 통한 이메일 전송을 허용해야 함).

이름 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)

Send-MailMessage:PowerShell에서 이메일 보내기

또한 변수에서 인증에 사용할 계정을 지정할 수 있습니다.

$cred = Get-Credential
Send-MailMessage ... -Credential $cred

PowerShell 스크립트에서 직접 SMTP 서버에 연결하기 위한 암호를 저장하려면 다음 구문을 사용하십시오.

$mypasswd = ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("user1@woshub.com", $mypasswd)
Send-MailMessage ... –Credential $mycreds

PowerShell 스크립트에서 저장된 자격 증명을 안전하게 사용 문서를 참조하세요.

이메일에 첨부 파일을 추가하려면 –Attachments를 사용하세요. 옵션. 아래 예에서는 HTML 형식으로 이메일을 보내고 로컬 디스크에서 file1.txt 및 install.log를 첨부합니다. Gmail SMTP 서버를 사용합니다(먼저 Gmail에서 앱 비밀번호를 만들고 Gmail 비밀번호 대신 smtp 인증에 사용해야 함):

$MailMessage = @{
To = "admin@woshub.com"
Bcc = "manager@woshub.com", "manager2@woshub.com"
From = "smtpsender1@gmail.com"
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 인터페이스에서 어떻게 보이는지 보여줍니다.

Send-MailMessage:PowerShell에서 이메일 보내기

-DeliveryNotificationOption을 사용하여 이메일에 대한 배달 알림(읽음 확인)을 구성할 수 있습니다. . 배달 알림을 사용하면 수신자가 이메일을 받으면 알림을 받을 수 있습니다.

사용 가능한 알림 유형은 다음과 같습니다.

  • OnSuccess (배송 성공 시 알림)
  • 실패 시 (배송 실패 시 알림)
  • 지연 (배송이 지연되는 경우 알림)