오늘의 PowerShell cmdlet은 Send-MailMessage입니다. 이 PowerShell cmdlet은 한 가지 목적만을 가지고 있으며, 이메일을 다양한 방식으로 보내는 데 사용됩니다.
Send-MailMessage cmdlet은 이메일 메시지를 보낼 수 있는 다양한 방법이 있기 때문에, 우리는 공통 예제를 모두 다루고자 합니다. 이 글에서는 가장 간단한 예제부터 아무도 겪고 싶지 않은 시나리오까지 다룰 예정입니다.
이 게시물은 PowerShell을 사용하여 이메일을 보내야 하는 경우 문법을 잊어버렸을 때 북마크할 수 있는 좋은 자료가 될 것입니다.
SMTP 서버
모든 이메일은 서버와 포트를 통해 어딘가의 SMTP 서버를 통과해야 합니다. SMTP 서버를 지정하려면 SMTPServer
라는 매개변수를 사용하여 연결을 설정하고 메일을 릴레이할 SMTP 서버를 지정할 수 있습니다. 그러나 필수적이지는 않습니다.
SMTPServer
매개변수에 값을 지정하지 않으면, $PSEmailServer
환경 변수에 저장된 값이 사용됩니다. 이 변수에 다른 변수와 마찬가지로 값을 할당할 수 있습니다.
그러나이 변수는 PowerShell 세션 간에 유지되지 않습니다. 이는 새로운 PowerShell 세션이 열릴 때마다 정의해야한다는 것을 의미합니다. 이러한 이유로 Send-MailMessage
참조 위에 정의하여 사용하거나 아예 정의하지 않는 것을 권장합니다. 대신 SMTPServer
매개변수 값을 직접 제공하는 것이 좋습니다. 이렇게하면 변경 될 수있는 외부 변수를 관리할 필요가 없습니다.
Port
기본적으로 cmdlet은 이메일을 SMTP 서버를 통해 보내기 위해 포트 25를 시도합니다. 이것은 일반적인 암호화되지 않은 SMTP입니다. 그러나 요즘에는 SSL/TLS를 사용하여 암호화된 이메일을 보내는 것이 더 일반적입니다 (나중에 이러한 시나리오를 다룰 것입니다).
포트를 25에서 변경해야하는 경우 Port
매개변수를 사용할 수 있습니다.
수신자 및 발신자
To, Cc 및 Bcc 필드와 같은 방법으로 다른 수신자에게 이메일을 보내려면 cmdlet에는 이를 수용하는 다양한 매개변수가 있습니다.
Send-Mailmessage Cmdlet의 To, Cc 및 Bcc 매개변수
cmdlet에는 각각 To
, Cc
및 Bcc
라는 여러 수신자를 쉼표로 구분하여 지원하는 세 가지 매개변수가 있습니다.
다음과 같이 단일 주소를 지정할 수 있습니다.
또는 각 매개변수 값에 대해 여러 수신자를 지정할 수 있습니다.
From 매개변수
이메일을 보낼 때, From
매개 변수를 지정하여 이메일의 회신-대 상 헤더를 설정할 수도 있습니다. 이 매개 변수는 하나의 주소만 허용합니다. 수신자가 이메일에 회신하려고 선택하는 경우, 회신은 이 이메일 주소로 돌아올 것입니다.
기본적으로, 이메일 주소를 사용하면 수신자의 FROM 필드에 단순히 이메일 주소가 표시됩니다. 그러나 서비스 계정 메일박스와 같은 이름이나 레이블을 지정하려는 경우, 이름과 이메일을 지정할 수도 있습니다:
주목할 점은
Subject
매개 변수가 사용된 것입니다. 이 매개 변수는 항상 필요합니다. 이 매개 변수는 모든 예제에서 사용됩니다.
본문
Body
매개 변수를 사용하면 이메일 본문에 무엇을 지정할지 설정할 수 있습니다. 가장 간단하게는 원하는 텍스트를 지정하고 cmdlet이 일반 텍스트로 보내도록 할 수 있습니다.
HTML 본문 이메일 보내기
일반 텍스트 대신 HTML을 사용하여 이메일 본문을 보낼 수도 있습니다. 이를 위해 일반 텍스트와 동일한 Body
매개 변수를 사용하지만 문자열에 HTML을 사용하고 BodyAsHtml
스위치 매개 변수를 사용하면 됩니다.
위의 예제에서 본문 문자열을
@'
와'@
로 감싼 것을 알 수 있습니다. 이를 here 문자열이라고 합니다. 이는 일반적으로 이메일 본문에 포함되는 줄바꿈을 포함하는 긴 문자열을 정의하는 데 사용됩니다. here 문자열은 문자열의 서식을 보존하며 특히 HTML 형식의 이메일 본문을 정의하는 좋은 방법입니다.
인코딩
이메일 제목 또는 본문에 특수 문자가 포함되어 있는 경우 Encoding
매개변수를 사용할 수 있습니다. 이 매개변수를 사용하면 전송하기 전에 지정된 인코딩 유형을 사용하여 이메일 제목과 본문을 인코딩할 수 있습니다.
여기에는 몇 가지 옵션이 있습니다:
- ASCII (기본값)
- UTF8
- UTF7
- UTF32
- Unicode
- BigEndianUnicode
- Default
- OEM
첨부 파일
이 cmdlet은 하나 이상의 파일을 첨부할 수도 있습니다. 이를 위해 Attachments
매개변수를 사용하고 첨부할 파일의 경로를 제공할 수 있습니다.
또한 쉼표로 구분하여 컬렉션을 사용하여 여러 첨부 파일을 지정할 수도 있습니다.
Attachments
매개변수는 Get-Item
및 Get-ChildItem
과 같은 cmdlet을 사용하여 파일을 Send-MailMessage
cmdlet으로 파이핑할 수도 있습니다.
보안 및 인증된 이메일
기본적으로 cmdlet은 포트 25를 통해 암호화되지 않은 SMTP 통신을 통해 이메일을 보냅니다. 그러나 사용자 이름과 암호를 사용하여 SSL/TLS를 통해 암호화된 이메일을 보내는 기능도 지원합니다.
인증이 필요한 SMTP 서버를 통해 이메일을 중계하려고 하면, 아래와 같은 오류 메시지가 표시되며 명령이 실패합니다.
이를 해결하기 위해 먼저 포트(일반적으로 TLS의 경우 587)와 UseSsl
매개변수를 지정해야 합니다. 이렇게 하면 cmdlet이 SMTP 서버의 587 포트에 연결을 시도하고 전체 메시지를 암호화하도록 지시합니다. 일반적으로(항상?) Credential
매개변수를 사용하여 SMTP 서버에 인증하기 위해 사용자 이름/암호를 지정해야 합니다.
위의 코드에서는
Get-Credential
cmdlet을 사용하여 자격 증명(PSCredential) 개체를 가져오고 있습니다. 이는 때로는 문제가 될 수 있습니다. 왜냐하면 상호 작용적이기 때문에 스크립트를 중지하여 사용자 이름과 암호를 요청하기 때문입니다. 이를 방지하기 위해 임시로 PSCredential 개체를 생성할 수 있습니다.
A common email example is to use Gmail. Using the knowledge you’ve gained above, you can now easily send email through Gmail using the smtp.gmail.com SMTP server as shown below.
이메일 우선순위 할당
개인적으로 이메일의 한 기능인 우선순위 할당이 사라졌으면 하는 바람이지만, Priority
매개변수를 사용하여 보낸 이메일에 우선순위 수준을 할당할 수 있습니다. 이 우선순위는 이메일 클라이언트에서 다양한 방식으로 해석됩니다.

Send-mailmessage를 사용하면 세 가지 다른 우선순위를 가진 이메일을 할당할 수 있습니다.
- 보통 (기본값)
- 높음
- 낮음
하지만, 하나님의 사랑을 위해 모든 이메일이 우선순위가 있는 것으로 생각하지 마십시오!
배송 알림
마침내, 이메일에 대한 배송 알림을 지정할 수 있습니다. 배송 알림은 일부 이메일 클라이언트에서 읽은 표시로 알려지는 것과 동일합니다. 배송 알림을 통해 수신자가 이메일을 받았는지 여부를 알 수 있습니다. 그러나 수신자는 여전히 허용해야 합니다.
배송 알림을 요청할 때 네 가지 옵션이 있습니다.
- 해당 없음 (기본값)
- 성공 시 (이메일이 성공적으로 전송될 때)
- 실패 시 (전송이 실패한 경우 알림)
- 지연 (SMTP 서버를 통해 이메일이 지연된 경우)
DeliveryNotificationOptions
매개변수를 사용하여 배송 알림 옵션을 지정할 수 있습니다.
또한 쉼표로 구분하여 여러 배송 알림을 동시에 요청할 수도 있습니다.
요약
이 게시물에서는 Send-mailmessage cmdlet에 대해 자세히 알아보았으며, 모든 매개변수와 예제를 사용하여 이 cmdlet을 다루었습니다. 이 게시물이 Send-mailmessage cmdlet을 사용할 때 참고 자료로 사용될 수 있기를 바랍니다.
추가 자료
관련된 다른 게시물도 확인해보세요!