Guide

Send-MailMessage 지원 중단: PowerShell 7 해결책

Send-MailMessage는 PowerShell 7에서 지원 중단 및 폐기되었습니다. TLS를 안전하게 협상할 수 없고, Basic Auth가 2026년 4월 30일에 종료되기 때문입니다. 이 가이드는 `nylas email send`로의 단계별 마이그레이션을 보여줍니다: 기본 전송, 호스팅 파일 링크, 자격 증명, SMTP 릴레이, HTML, 대량 루프. Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP을 지원합니다.

Written by Nick Barraclough Product Manager

Reviewed by Qasim Muhammad

VerifiedCLI 3.1.1 · Outlook, Gmail · last tested April 11, 2026

Send-MailMessage가 지원 중단된 이유

Microsoft는 PowerShell 7.0에서 Send-MailMessage를 지원 중단했습니다. 기반 SMTP 라이브러리가 TLS를 안전하게 협상할 수 없고, 의존하는 Basic Auth 자격 증명이 주요 프로바이더에서 종료되고 있기 때문입니다. Microsoft의 공식 문서는 이 cmdlet을 폐기로 표시하고 서드파티 대안을 권장합니다. Send-MailMessage를 여전히 사용하는 스크립트는 무음 전달 실패, 연결 거부 또는 자격 증명 노출 위험에 직면합니다.

기반 System.Net.Mail.SmtpClient 클래스 자체가 폐기로 문서화되어 있습니다(공식 문서). 현대 프로바이더가 요구하는 방식으로 TLS를 협상하지 못하기 때문입니다. 구체적인 문제점:

  • 안전하지 않은 TLS 협상 -- SmtpClient는 현대 TLS 핸드셰이크를 안정적으로 지원하지 않음
  • 스크립트 내 자격 증명 -- SMTP 비밀번호가 -Credential에 하드코딩되거나 PSCredential 객체에 저장됨
  • OAuth2 미지원 -- Gmail과 Outlook은 프로그래밍 접근에 OAuth2를 요구; Send-MailMessage는 Basic Auth만 지원하고, Microsoft는 2022년 10월에 Exchange Online의 Basic Auth를 중단
  • 프로바이더 종속 -- SMTP 설정이 프로바이더마다 다름; 전환은 연결 코드 재작성을 의미

일회성 설정

Send-MailMessage 대체에는 약 2분 소요되는 일회성 설치 및 인증 단계가 필요합니다. 설정 후 모든 nylas email send 호출은 OS 키체인에 저장된 OAuth2 토큰으로 인증됩니다 -- 스크립트에 SMTP 서버 주소, 포트 번호, 평문 자격 증명이 전혀 없습니다. CLI는 단일 인터페이스로 Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP을 지원합니다.

PowerShell 설치 스크립트는 GitHub에서 최신 릴리스를 다운로드하고 바이너리를 ~/.config/nylas/bin에 배치하기 전에 SHA-256 체크섬을 확인합니다. 다음 명령어로 설치:

# Windows에 Nylas CLI 설치
irm https://cli.nylas.com/install.ps1 | iex

Homebrew, 셸 스크립트, Go 설치는 시작하기 가이드를 참조하세요.

설치 후 Nylas API 키로 인증합니다. CLI는 키를 Windows Credential Manager(또는 macOS/Linux 키체인)에 저장하므로 스크립트 파일에 나타나지 않습니다. 인증은 명시적으로 취소할 때까지 PowerShell 세션 간에 유지됩니다.

# 메일박스 인증
nylas auth config
# dashboard-v3.nylas.com에서 API 키 붙여넣기

# 확인
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)

끝입니다. SMTP 서버 없음, 포트 번호 없음, 스크립트에 자격 증명 없음.

패턴 1: 기본 이메일 전송

기본 이메일 전송은 가장 일반적인 Send-MailMessage 사용 패턴입니다. 지원 중단된 버전은 8개 매개변수가 필요합니다 -- SMTP 서버, 포트, TLS 플래그, 자격 증명, 발신자, 수신자, 제목, 본문. Nylas CLI 대체는 OAuth2 인증, 발신자 ID, 전송 암호화가 자동으로 처리되므로 4개 매개변수로 줄입니다.

Send-MailMessage 버전은 Get-Credential을 통해 SMTP 비밀번호를 노출합니다. 이는 대화형으로 요청하거나(자동화 차단) 저장된 자격 증명 파일이 필요합니다. Nylas CLI는 대신 OS 키체인에서 API 키를 읽습니다.

이전 (Send-MailMessage)

Send-MailMessage `
  -From "you@company.com" `
  -To "colleague@company.com" `
  -Subject "Quarterly report" `
  -Body "Please review the Q4 numbers." `
  -SmtpServer "smtp.office365.com" `
  -Port 587 `
  -UseSsl `
  -Credential (Get-Credential)

이후 (Nylas CLI)

Nylas CLI 버전은 인증된 계정을 자동으로 발신자로 사용하여 -From, -SmtpServer, -Port, -Credential 매개변수를 완전히 제거합니다. --yes 플래그는 자동화 스크립트용으로 확인 프롬프트를 건너뜁니다.

nylas email send `
  --to "colleague@company.com" `
  --subject "Quarterly report" `
  --body "Please review the Q4 numbers." `
  --yes

패턴 2: 첨부 파일 전송을 링크로 대체

Send-MailMessage로 파일 첨부를 보내려면 로컬 파일 경로를 받는 -Attachments 매개변수를 사용합니다. 현재 nylas email send 명령어는 첨부 전송 플래그를 노출하지 않으므로 본문에 공유 가능한 파일 링크로 마이그레이션하거나, 메시지에 MIME 첨부가 필요할 때 Nylas API/SDK 경로를 사용하세요.

지원 중단된 Send-MailMessage 버전은 첨부 플래그와 함께 SMTP 자격 증명 및 서버 설정이 여전히 필요합니다. CLI 버전은 인증된 전송 경로를 단순하고 감사 가능하게 유지하며, 파일 저장은 이미 접근 제어와 보존을 관리하는 시스템에 남깁니다.

이전 (Send-MailMessage)

Send-MailMessage `
  -From "you@company.com" `
  -To "client@example.com" `
  -Subject "Invoice attached" `
  -Body "Please find the March invoice." `
  -Attachments "C:\Reports\invoice-march.pdf" `
  -SmtpServer "smtp.gmail.com" `
  -Port 587 `
  -UseSsl `
  -Credential $cred

이후 (Nylas CLI)

CLI에 일대일 첨부 플래그가 있는 것처럼 가장하는 대신, 생성된 파일의 링크를 보냅니다. 이는 대체 명령어를 nylas email send --help에 대해 유효하게 유지하고 숨겨진 SMTP 자격 증명 처리를 방지합니다.

nylas email send `
  --to "client@example.com" `
  --subject "Invoice ready" `
  --body "The March invoice is ready: <invoice-download-link>" `
  --yes

패턴 3: 저장된 자격 증명으로 전송

Send-MailMessage용 SMTP 자격 증명 저장은 알려진 보안 문제입니다. 표준 PowerShell 접근법은 Export-Clixml / Import-ClixmlPSCredential을 XML 파일로 직렬화하지만, 암호화는 현재 사용자와 머신에 묶여 있어 CI/CD 러너, 공유 서비스 계정, 컨테이너 배포가 모두 동작하지 않습니다. Microsoft Security Response Center의 2023년 권고에 따르면, 자동화 스크립트의 하드코딩된 자격 증명은 기업 보안 침해에서 상위 5대 공격 벡터에 포함됩니다.

Nylas CLI는 자격 증명 파일을 완전히 제거합니다. API 키는 OS 키체인(Windows Credential Manager, macOS Keychain 또는 Linux secret service)에 한 번 저장되고, 스크립트 소스 코드에 나타나지 않습니다.

이전 (Send-MailMessage)

# 자격 증명을 파일에 저장하거나 매번 프롬프트
$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"
# 또는: $cred = Get-Credential

Send-MailMessage `
  -From "alerts@company.com" `
  -To "oncall@company.com" `
  -Subject "Server alert" `
  -Body "CPU above 90%." `
  -SmtpServer "smtp.office365.com" `
  -Port 587 `
  -UseSsl `
  -Credential $cred

이후 (Nylas CLI)

Nylas CLI에서는 스크립트 본문에 시크릿이 없습니다. API 키는 nylas auth config 시 한 번 저장되고 런타임에 OS 키체인에서 읽힙니다.

# 스크립트에 자격 증명 없음 -- API 키는 CLI가 안전하게 저장
nylas email send `
  --to "oncall@company.com" `
  --subject "Server alert" `
  --body "CPU above 90%." `
  --yes

패턴 4: SMTP 릴레이를 통한 전송

많은 조직이 인증 없이, TLS 암호화 없이 포트 25에서 내부 SMTP 릴레이 서버를 운영합니다. 이 릴레이는 신뢰 경계 모델을 위해 설계되었지만 공격자가 네트워크 접근을 얻으면 횡적 이동의 빈번한 대상이 됩니다. CISA의 2024년 이메일 인프라 권고에 따르면, 인증되지 않은 SMTP 릴레이는 비즈니스 이메일 침해 사건의 23%에 관여합니다. 릴레이를 OAuth2 인증 API 호출로 대체하면 이 공격 표면을 완전히 제거합니다.

Send-MailMessage 릴레이 패턴은 포트 25에서 인증 없이 전송합니다. Nylas CLI 버전은 OAuth2 인증 HTTPS를 통해 라우팅하며, 대상 프로바이더에 관계없이 모든 요청에서 TLS 1.2+를 강제합니다.

이전 (Send-MailMessage)

# 내부 릴레이 -- 인증 없음, TLS 없음
Send-MailMessage `
  -From "noreply@internal.corp" `
  -To "team@company.com" `
  -Subject "Build complete" `
  -Body "Build #1234 succeeded." `
  -SmtpServer "relay.internal.corp" `
  -Port 25

이후 (Nylas CLI)

Nylas CLI 버전은 포트 25의 내부 릴레이에 연결하는 대신 프로바이더의 API를 HTTPS로 통해 전송합니다. 모든 요청은 OAuth2 인증되고 TLS 1.2 이상으로 암호화됩니다.

# OAuth2 인증, TLS 암호화, 내부 릴레이 불필요
nylas email send `
  --to "team@company.com" `
  --subject "Build complete" `
  --body "Build #1234 succeeded." `
  --yes

패턴 5: HTML 이메일

Send-MailMessage로 HTML 이메일을 보내려면 -BodyAsHtml 스위치 매개변수가 필요합니다. 이것이 없으면 HTML 태그가 수신자의 수신함에 리터럴 텍스트로 렌더링됩니다. Nylas CLI는 <h1>, <p>, <table> 같은 시작 태그를 확인하여 HTML 콘텐츠를 자동 감지한 후 MIME 타입을 text/html로 자동 설정합니다 -- 추가 플래그 불필요. 이 감지는 인라인 CSS와 중첩된 요소를 포함한 모든 유효한 HTML 프래그먼트에서 작동합니다.

Send-MailMessage HTML 패턴은 PowerShell here-string(@"..."@)으로 HTML 본문을 정의한 후 -BodyAsHtml 플래그로 전달합니다. 이 플래그가 없으면 수신자는 원시 마크업을 봅니다.

이전 (Send-MailMessage)

$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
  <li>Deployments: 12</li>
  <li>Incidents: 0</li>
</ul>
"@

Send-MailMessage `
  -From "reports@company.com" `
  -To "team@company.com" `
  -Subject "Weekly report" `
  -Body $htmlBody `
  -BodyAsHtml `
  -SmtpServer "smtp.office365.com" `
  -Port 587 `
  -UseSsl `
  -Credential $cred

이후 (Nylas CLI)

Nylas CLI 버전은 -BodyAsHtml 플래그를 완전히 제거합니다. 동일한 here-string을 --body에 전달하면 CLI가 HTML 태그를 감지하고 MIME 타입을 text/html로 자동 설정합니다.

$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
  <li>Deployments: 12</li>
  <li>Incidents: 0</li>
</ul>
"@

nylas email send `
  --to "team@company.com" `
  --subject "Weekly report" `
  --body $htmlBody `
  --yes

패턴 6: 대량 전송 루프

Send-MailMessage를 사용한 대량 이메일 루프는 루프 외부에서 자격 증명 설정이 필요하고 반복 연결을 처리할 수 있는 SMTP 서버가 필요합니다. 많은 SMTP 릴레이는 세션당 100-300 메시지 후 제한하고, Gmail의 SMTP 게이트웨이는 무료 계정을 하루 500 메시지로 제한합니다. Nylas CLI 버전은 자격 증명 보일러플레이트를 제거하고 동일한 Start-Sleep 스로틀을 유지하면서 루프 본문을 10줄에서 5줄로 줄입니다.

Send-MailMessage 대량 패턴은 루프 전에 직렬화된 자격 증명 파일을 로드하고 매 반복에서 전달합니다. 자격 증명 파일은 비밀번호 변경이나 스크립트의 다른 머신 이동 시 재내보내기해야 합니다.

이전 (Send-MailMessage)

$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"

Import-Csv -Path ".\contacts.csv" | ForEach-Object {
  Send-MailMessage `
    -From "onboarding@company.com" `
    -To $_.Email `
    -Subject "Welcome, $($_.Name)!" `
    -Body "Your account is ready." `
    -SmtpServer "smtp.office365.com" `
    -Port 587 `
    -UseSsl `
    -Credential $cred
  Start-Sleep -Seconds 2
}

이후 (Nylas CLI)

Nylas CLI 루프는 자격 증명 임포트와 SMTP 설정 라인을 제거합니다. 각 반복은 키체인에 저장된 API 키를 사용하여 프로바이더의 API를 통해 전송하므로, nylas auth config가 실행된 모든 머신에서 스크립트가 동일하게 작동합니다.

Import-Csv -Path ".\contacts.csv" | ForEach-Object {
  nylas email send `
    --to $_.Email `
    --subject "Welcome, $($_.Name)!" `
    --body "Your account is ready." `
    --yes
  Start-Sleep -Seconds 2
}

나란히 비교

이 표는 Send-MailMessage와 Nylas CLI 간의 11가지 기능 차이를 요약합니다. 지원 중단된 cmdlet은 수동 SMTP 설정과 평문 자격 증명으로 기본 전송 작업만 지원합니다. CLI는 Send-MailMessage의 모든 기능을 매칭하고 cmdlet이 제공하지 못한 4가지 기능을 추가합니다: 이메일 예약, 수신함 읽기 접근, JSON 구조화 출력, 캘린더 관리.

기능Send-MailMessageNylas CLI
TLS 보안손상 (지원 중단)TLS 1.2+ 강제
인증Basic Auth / 앱 비밀번호OAuth2
스크립트 내 자격 증명있음 (PSCredential / XML)없음 (OS 키체인)
Gmail 지원앱 비밀번호 필요OAuth2 내장
Outlook / M365 지원Basic Auth (비활성화 진행 중)OAuth2 내장
HTML 본문-BodyAsHtml 플래그자동 감지
첨부 파일-Attachments링크 전송, 또는 Nylas API/SDK로 MIME 첨부
이메일 예약미지원--schedule
수신함 읽기미지원nylas email list
JSON 출력미지원--json
캘린더 접근미지원nylas calendar

자주 묻는 질문

이것은 Send-MailMessage에서 현대적 대안으로 마이그레이션할 때 개발자가 가장 자주 묻는 질문입니다. 답변은 지원 중단 타임라인, 마이그레이션 노력, Send-MailMessage와 Nylas CLI 간의 기능 동등성을 다룹니다. Microsoft는 2020년 3월 출시된 PowerShell 7.0에서 공식적으로 cmdlet을 지원 중단했습니다 -- 6년 이상 전입니다.

왜 Send-MailMessage가 지원 중단되었나요?

Microsoft가 PowerShell 7.0에서 지원 중단했습니다. 기반 System.Net.Mail.SmtpClient가 TLS를 안전하게 협상할 수 없기 때문입니다. Microsoft는 서드파티 라이브러리 사용을 권장합니다.

Send-MailMessage의 최고 대안은?

Nylas CLI는 하나의 명령어로 Send-MailMessage를 대체합니다. OAuth2, TLS, 프로바이더 차이를 자동으로 처리합니다. 스크립트에 SMTP 자격 증명 없음, 프로바이더별 설정 없음.

PowerShell 스크립트를 변경해야 하나요?

네, 하지만 지원되는 전송 필드의 마이그레이션은 간단합니다. 각 Send-MailMessage 호출을 nylas email send로 대체하고 매개변수를 매핑하세요: -To--to로, -Subject--subject로, -Body--body로. -Attachments의 경우 호스팅된 파일 링크를 보내거나 Nylas API/SDK 첨부 경로를 사용하세요.

Nylas CLI는 Send-MailMessage의 모든 기능을 지원하나요?

--body를 통한 HTML 본문, CC/BCC, 다중 수신자를 지원합니다. Send-MailMessage에 없던 기능도 추가합니다: OAuth2, 이메일 예약, 오픈/클릭 추적, JSON 출력, 수신함 읽기 접근. 첨부 전송은 현재 CLI 플래그가 아닙니다. MIME 첨부가 필요할 때는 호스팅된 파일 링크 또는 Nylas API/SDK를 사용하세요.

다음 단계

Send-MailMessagenylas email send로 대체한 후, 아래 가이드가 관련 PowerShell 이메일 워크플로를 다룹니다 -- 수신함 읽기, 첨부 파일 다운로드, 자동화 보고서 작성, Office 365 이메일 관리. 각 가이드에는 이 마이그레이션에서 사용한 동일한 CLI 버전으로 테스트된 코드 예시가 포함되어 있습니다.