Microsoft Azure에는 이메일 전송 서비스가 없습니다. Azure에서 애플리케이션을 테스트하거나 이메일을 보내기 위해 스크립트를 개발하는 경우, 내장된 이메일 서비스를 사용할 수 없음을 알아두세요.
또한 Azure에서는 포트 25를 통한 외부 SMTP 연결이 완전히 차단되어 있습니다. 기업 고객인 경우, Azure 테넌트의 포트 25 차단 해제를 요청할 수 있습니다. 그렇지 않으면 Azure에서 어떻게 이메일을 보낼 수 있을까요?
Azure를 통해 이메일을 보내는 데는 일반적으로 두 가지 방법이 있습니다. SMTP 스마트 호스트와 REST API 요청을 사용하는 것입니다. 대부분의 이메일 전송 서비스는 SMTP 및 API 방식으로 이메일을 보내는 기능을 제공합니다. 이 문서에서는 Azure에서 전 세계로 이메일을 보내는 방법을 알아보겠습니다.
전제 조건
이 문서는 How-To 문서이며, 진행되는 예제를 따라하려는 경우 몇 가지 요구 사항을 충족해야 합니다.
- Azure 구독. 아직 Azure 구독이 없는 경우 무료 평가판 Azure 구독을 등록할 수 있습니다.
- Azure 가상 머신(VM).아직 가상 머신을 보유하고 있지 않은 경우, 새로운 VM을 생성하는 방법은 Azure 포털에서 Windows 가상 머신 만들기를 참조하십시오.
- Windows PowerShell 5.1 또는 PowerShell 7.1.
- A valid sender email address. Using a free email address domain, such as gmail.com, is not recommended. As much as possible, use a sender email address that uses a domain that you own.
Azure에서 이메일 보내기에 사용할 이메일 서비스 선택하기
사용 가능한 여러 클라우드 이메일 서비스가 있습니다. 그 중에서도 주요한 서비스로는 SendGrid, MailJet 및 MailGun이 있습니다. 선택한 이메일 서비스에 관계없이, Azure에서 이메일을 보내기 위해서는 SMTP의 서버 주소와 포트, REST의 API 엔드포인트 주소를 사용합니다.
이 문서에서는 SendGrid를 외부 이메일 서비스로 사용하는 예시를 제공합니다. 또한 예시로 사용되는 부가적인 이메일 서비스로는 Office 365 SMTP 릴레이 및 Microsoft Graph API가 있습니다.
관련 내용: 2021년에 선택할 Azure 이메일 서비스
SendGrid 사용하기
SendGrid은 아마도 Azure에서 이메일을 보내는 데 가장 인기있는 옵션입니다. Azure와 SendGrid는 Azure 고객에게 매월 25,000개의 이메일 제한이 있는 무료 요금제가 있었기 때문에 인기가 많습니다.
하지만 더 이상 Azure 포털에서 무료 요금제를 제공하지 않으며, Microsoft에서 확인한 대로, 하루에 100개의 이메일 제한이 있는 무료 구독을 신청할 수 있습니다. 그럼 SendGrid의 SMTP 릴레이 서비스 또는 이메일 API를 사용하여 Azure 앱이나 가상 머신에서 이메일을 보낼 수 있습니다.
SendGrid 계정 생성
SendGrid의 서비스를 사용하려면 먼저 SendGrid 계정이 있어야 합니다. 가입 페이지로 이동하면 아래와 같은 양식이 나타납니다. 이메일 주소와 선택한 비밀번호를 입력하세요. 그런 다음 약관에 동의하고 계정 생성 버튼을 클릭하세요.

다음 페이지에서 이름과 회사 정보를 입력해야 합니다. 또한 역할, 월별 보낼 이메일 수 및 직원 수와 같은 적절한 옵션을 선택해야 합니다. 그런 다음 시작을 클릭하세요.

SendGrid에 처음 로그인하면 “SendGrid에 액세스할 권한이 없습니다. 지원팀에 문의하십시오.”라는 오류가 발생할 수 있습니다. 이럴 경우, SendGrid 지원팀과 티켓을 열어야합니다. 접근 권한을 잠금 해제하기 전에 확인 질문 몇 가지를 하실 수도 있습니다.
첫 번째 로그인 중에 이중 인증을 활성화하도록 요청될 수 있습니다. 지시 사항을 정확히 따르십시오.
SendGrid 발신자 신원 생성
SendGrid 계정을 생성한 후, 다음 단계는 발신자의 신원을 인증하는 것입니다. 두 가지 옵션이 있습니다. 단일 발신자(예: [email protected]) 또는 전체 도메인(예: domain.com) 인증입니다.
이 예제에서는 발신자 주소로 사용될 단일 발신자 신원을 생성합니다. 확인된 발신자 주소만 SendGrid의 서비스를 통해 메시지를 보낼 수 있습니다. 아래 지침에 따라 단일 발신자 신원을 생성하십시오.
- 환영 페이지에서 단일 발신자 생성 버튼을 클릭하십시오.

2. 다음으로, 발신자 생성 팝업에서 필요한 모든 정보를 제공하십시오. 필수 입력란은 표시를 위해 빨간 별표로 표시됩니다. 세부 정보를 입력한 후 생성을 클릭하십시오.

그럼 단일 발신자 확인 페이지에 새로운 발신자 주소가 나열된 것을 확인할 수 있습니다. 아래 예시에서 확인할 수 있듯이, 주소는 아직 확인되지 않았으며 확인됨 열 아래에 빨간색 X로 표시됩니다.

3. 발신자를 확인하려면, 발신자 주소로 전송된 이메일을 찾아서 아래 스크린샷과 유사하게 단일 발신자 확인 버튼을 클릭하십시오.

발신자 주소가 확인됩니다. 확인이 완료된 것을 확인할 수 있는 아래와 같은 페이지가 표시됩니다.

SendGrid API 키 생성
단일 발신자 주소를 생성한 후 API 키를 생성하는 인터페이스가 사용 가능해집니다. SendGrid API 키는 비밀번호와 같은 역할을 합니다. 이 키가 없으면 코드가 SendGrid SMTP 릴레이 서비스와 인증할 수 없습니다. 아래 단계를 따라 새 API 키를 생성하십시오.
- 왼쪽 메뉴에서 설정 > API 키를 클릭하십시오. 그런 다음 페이지의 오른쪽 상단에 있는 API 키 생성 버튼을 클릭하십시오.

2. API 키 생성 팝업이 나타납니다. 생성하는 API 키의 이름을 입력하십시오. “Azure 테스트 API 키”와 같이 의미 있는 이름을 사용하십시오. 간편함을 위해 권한으로 전체 액세스를 선택하십시오. 마지막으로 생성 및 보기 버튼을 클릭하십시오.

3. 새로운 API 키가 표시됩니다. 이제 키-값을 복사하여 저장하십시오. 키를 복사한 후 완료를 클릭하십시오.

SendGrid SMTP 릴레이를 사용하여 Azure에서 이메일 보내기
이제 SendGrid를 사용하여 Azure 이메일을 보내기 위해 필요한 구성 요소(계정, 발신자 및 키)를 갖고 있습니다. SendGrid SMTP 중계 서비스가 작동하는지 테스트할 시간입니다. 이 섹션에서는 PowerShell을 사용하여 Azure 가상 머신에서 이메일을 보냅니다.
코드를 실행하기 전에 다음 요구 사항을 알아야 합니다.
- SendGrid SMTP 서버 주소는 smtp.sendgrid.net입니다.
- SMTP 인증에 사용되는 사용자 이름은 항상 apikey입니다.
- 사용할 비밀번호는 SendGrid에서 생성한 API 키의 값입니다.
- 포트 25를 사용하지 마십시오. 대신 포트 587을 사용하십시오.
- SendGrid의 검증된 발신자 주소만 이메일의 발신자로 사용할 수 있습니다. 이 예제에서는 허가된 발신자는 [email protected]입니다.
아래 스크립트는 SendGrid SMTP 중계를 통해 이메일을 보냅니다. 아래 코드를 복사하고 $sendGridApiKey
, From
, To
및 Body
값을 변경한 다음 PowerShell 세션에서 코드를 실행하십시오. 각 줄의 코드가 무엇을 하는지 이해하기 위해 주석을 참조하십시오.
아래의 데모는 PowerShell에서 위의 코드를 실시간으로 실행하는 모습을 보여줍니다.

이메일 전달 가능성을 확인하기 위해 수신자의 메일함에서 보낸 테스트 메시지를 찾으세요. 결과는 아래와 유사합니다. 보시다시피, 메시지는 발신자 주소인 sendgrid.net을 통해 전송되었습니다.

관련: Send-MailMessage: PowerShell을 사용한 이메일 전송 방법
SendGrid API를 사용하여 Azure에서 이메일 보내기
SendGrid을 Azure와 함께 사용하여 이메일을 보내는 또 다른 방법은 SendGrid Web API V3를 사용하는 것입니다. SMTP를 통해 SendGrid과 통신하는 대신, API를 사용하여 HTTP로 통신합니다. HTTP 요청은 SendGrid의 API 엔드포인트 URL로 전송됩니다.
아래 예제 PowerShell 스크립트는 Azure에서 SendGrid로 이메일 요청을 제출하는 Invoke-RestMethod
cmdlet을 사용합니다. 코드를 복사하고 $sendGridApiKey
, $fromAddress
, $toAddress
, $mailSubject
, $mailMessage
변수 값만 변경하십시오.
변수를 업데이트한 후 PowerShell에서 코드를 실행하십시오.
위의 PowerShell 코드를 실행한 후 수신자의 메일박스를 확인하여 테스트 메시지가 정상적으로 수신되었는지 확인하십시오. 아래 예시는 Azure에서 SendGrid API를 통해 성공적으로 전송된 테스트 메시지를 보여줍니다.

SendGrid 웹 API에 대해 자세히 알아보려면 V3 Mail Send API 페이지를 방문하십시오.
Office 365 SMTP 인증 사용
Azure 이메일을 전송하는 또 다른 옵션은 Office 365 SMTP 릴레이를 사용하는 것입니다. 이는 조직이 이미 Exchange Online 구독을 가지고 있는 경우에만 해당됩니다. SendGrid를 SMTP 스마트 호스트로 사용하는 것과 마찬가지로 Office 365 SMTP 릴레이는 인증과 포트 587만 사용합니다.
Office 365 SMTP 릴레이를 사용하기 전에 다음 조건을 알아야 합니다.
- 발신자 주소는 메일박스나 메일 사용자와 같은 유효한 Exchange Online 수신자 개체여야 합니다. 그러나 비배달 알림(NDR)을 저장하려는 경우 메일박스를 사용하십시오.
- 인증 사용자는 유효한 Exchange Online 라이선스를 가져야 합니다. Office 365 SMTP 릴레이를 사용할 수 있는 것은 라이선스가 있는 Exchange Online 사용자뿐입니다.
- 인증 사용자가 발신자와 다른 경우, 사용자는 발신자 계정에 Send As 권한을 할당받아야 합니다.
- 사용하는 인증 방법은 기본 (레거시)입니다. 이는 조직에서 SMTP 기본 인증을 비활성화하거나 Microsoft가 기본 인증을 제거할 경우, SMTP 인증이 더 이상 작동하지 않게 됨을 의미합니다.
- SMTP 중계 서버 주소는 smtp.office365.com이며, 포트 번호는 587입니다.
관련: Office 365 직접 전송 및 PowerShell을 사용하여 이메일 보내는 방법
Office 365 발신자 주소 생성
이 예제에서 발신자와 인증 사용자는 분리되어 있습니다. 먼저 Exchange Online PowerShell에 연결해야 합니다. 연결한 후에는 아래 단계를 따르세요.
아래 명령을 사용하여 공유 메일박스를 생성하세요. -Name
및 -PrimarySMTPAddress
를 올바른 값으로 변경하세요.
공유 메일박스가 생성되고 아래와 유사한 결과가 반환됩니다.

그런 다음 인증 사용자에게 전송 권한을 할당합니다. 아래 예시에서 사용자는 공유 메일박스에 전송 권한을 할당받습니다.
위의 명령을 실행하면 아래와 유사한 결과를 얻을 수 있습니다.

Office 365 SMTP 릴레이를 사용하여 Azure에서 이메일 보내기
발신자 주소 생성 및 전송 권한 할당 후, PowerShell 및 Office 365 SMTP 릴레이를 사용하여 이메일 전송을 테스트하는 것이 다음 단계입니다.
아래 코드는 [email protected]을 사용하여 인증을 수행합니다. 발신자 주소는 [email protected]로 표시됩니다. 코드를 실행하기 전에 올바른 값으로 할당해야 합니다.
평문으로 된 스크립트에서 자격 증명을 사용하는 것은 권장되지 않습니다. 실제 운영 스크립트는 자격 증명 암호화 또는 비밀 관리를 사용하여 사용자 이름과 암호를 보호해야 합니다.
이제 수신자의 메일박스를 확인해야 합니다. 테스트 메시지가 수신되었는지 확인하세요.

Azure 이메일을 보내기 위해 Microsoft Graph API 사용하기
Office 365 SMTP 릴레이 대신에 더 안전하고 권장되는 방법은 Microsoft Graph API를 사용하는 것입니다. Microsoft Graph API를 사용하면 REST API 호출을 통해 조직의 모든 메일박스에서 이메일을 보낼 수 있습니다.
Microsoft Graph API를 사용하여 이메일을 보내려면 등록된 Azure AD 앱이 필요합니다. 등록된 앱은 Mail.Send API 권한이 할당되어야 합니다. 다음 섹션에서는 Microsoft Graph API를 구성하고 이를 사용하여 이메일을 보내는 방법을 보여줍니다.
관련 정보: PowerShell을 사용하여 Microsoft Graph API 사용하기
Azure Active Directory에 새 앱 등록하기
이 섹션에서는 Azure Active Directory에 새 웹 앱을 등록합니다. 새 앱은 Microsoft Graph의 인증 ID로 작동합니다. Azure 포털에 로그인하지 않은 경우 로그인합니다.
- Azure Active Directory —> 앱 등록으로 이동합니다. 그런 다음 새 등록 버튼을 클릭합니다.

2. 애플리케이션 등록 페이지에서 앱의 이름을 입력합니다.
3. 지원되는 계정 유형에서 이 조직 디렉터리 내의 계정을 선택하십시오. 리디렉션 URI로 HTTP://localhost를 입력하십시오. 마지막으로 등록 버튼을 클릭하십시오.

4. 등록이 완료될 때까지 기다리십시오. 이 프로세스는 몇 초만 걸립니다. 결과로 나온 애플리케이션 (클라이언트) ID와 디렉터리 (테넌트) ID 값을 메모해두십시오. 이후에 필요합니다.

클라이언트 비밀 키 생성
이전 섹션에서 생성한 애플리케이션 ID를 사용자 이름으로 생각하십시오. 그리고 그 애플리케이션 ID에는 비밀 키가 필요합니다.
새로운 애플리케이션 비밀 키를 추가하려면 아래 단계를 따르십시오.
- 인증서 및 비밀로 이동한 다음 새 클라이언트 비밀을 클릭하십시오.
- 클라이언트 비밀에 대한 설명을 입력하십시오. 예를 들어 키1입니다.
- 비밀이 만료되는 시기를 선택하고 추가를 클릭하십시오. 아래 예에서 비밀 키는 1년 후에 만료됩니다.

새 키가 클라이언트 비밀 섹션에 나열됩니다. 이제만 키 값을 볼 수 있으므로 복사본을 저장하십시오.

API 권한 할당 및 관리자 동의 부여
이제 애플리케이션 ID와 비밀 키를 생성했으므로 필요한 Microsoft Graph API 권한을 할당하는 것이 남았습니다. 권한을 할당하지 않으면 애플리케이션은 인증은 할 수 있지만 이메일을 보내는 등의 권한이 없을 것입니다.
권한 할당을 시작하려면 아래 단계를 따르십시오.
- 왼쪽 메뉴에서 API 권한을 클릭하십시오.
2. 그런 다음, 구성된 권한 페이지에서 권한 추가 버튼을 클릭하십시오.

3. API 권한 요청 팝업에서 Microsoft Graph API를 선택하십시오.

4. 응용 프로그램이 필요로 하는 권한 유형을 선택하라는 메시지가 나타나면 응용 프로그램 권한을 클릭하십시오.
5. 검색 상자에 Mail.Send를 입력하여 검색하십시오. 결과에서 Mail.Send 권한을 확인하려면 해당 권한을 클릭하십시오. 마지막으로 권한 추가를 클릭하십시오.

6. 권한 상태가 “<조직 이름>에 대해 허용되지 않음“인 것을 알 수 있습니다. 이 시점에서 권한을 부여하기 위해 관리자 또는 글로벌 관리자가 먼저 동의해야 합니다. 권한을 부여하려면 <조직>에 대해 관리자 동의 부여 버튼을 클릭하십시오.

그러면 API 권한 상태가 “<조직 이름>에 대해 허용됨“으로 변경됩니다.

액세스 토큰 획득
Microsoft Graph API로 보내는 요청에는 액세스 토큰이 필요합니다. 이 시점에서 이미 응용 프로그램 ID, 비밀 키 및 테넌트 ID를 가지고 있습니다. 이 세 가지 정보는 액세스 토큰을 얻기 위해 필요한 정보입니다.
아래 PowerShell 스크립트는 액세스 토큰 요청을 Microsoft Graph API 엔드포인트로 보냅니다. 먼저 $client_id
, $client_secret
및 $tenant_id
를 올바른 값으로 업데이트한 다음 PowerShell에서 코드를 복사하여 붙여넣으십시오.
아래 예제는 PowerShell 스크립트를 실행한 결과를 보여줍니다. 요청된 액세스 토큰이 $token
변수에 저장된 것을 주목하세요.

액세스 토큰은 발급된 시간으로부터 1시간 동안 유효합니다. 이전 토큰이 만료된 후에는 새로운 액세스 토큰을 요청해야 합니다.
Microsoft Graph API를 사용하여 Azure에서 이메일 보내기
Azure에서 Microsoft Graph API를 사용할 준비가 되었습니다.
# 발신자와 수신자 이메일 주소 제공
$fromAddress = 'SENDER ADDRESS HERE'
$toAddress = 'RECIPIENT ADDRESS HERE'
# 이메일 제목과 메시지 지정
$mailSubject = 'This is a test message from Azure via Microsoft Graph API'
$mailMessage = 'This is a test message from Azure via Microsoft Graph API'
# 아래의 내용은 변경하지 마세요
# Microsoft Graph API 요청 빌드
$params = @{
"URI" = "https://graph.microsoft.com/v1.0/users/$fromAddress/sendMail"
"Headers" = @{
"Authorization" = ("Bearer {0}" -F $token)
}
"Method" = "POST"
"ContentType" = 'application/json'
"Body" = (@{
"message" = @{
"subject" = $mailSubject
"body" = @{
"contentType" = 'Text'
"content" = $mailMessage
}
"toRecipients" = @(
@{
"emailAddress" = @{
"address" = $toAddress
}
}
)
}
}) | ConvertTo-JSON -Depth 10
}
# 메시지 보내기
Invoke-RestMethod @params -Verbose