Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Send-MailMessage:Gửi email từ PowerShell

Để gửi tin nhắn email thông qua máy chủ SMTP, bạn có thể sử dụng Gửi tin nhắn thư Lệnh ghép ngắn PowerShell. Bạn có thể sử dụng lệnh ghép ngắn tích hợp này để gửi email trong PowerShell phiên bản 2.0 và mới hơn (trước đó bạn có thể sử dụng .Net System.Net.Mail lớp để gửi email). Trong bài viết này, chúng tôi sẽ hướng dẫn cách sử dụng Send-MailMessage để gửi email từ tập lệnh PowerShell.

Để lấy cú pháp của lệnh ghép ngắn, hãy chạy lệnh sau:

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:Gửi email từ PowerShell

Dưới đây là các tùy chọn chính:

  • Từ là địa chỉ người gửi (Nếu máy chủ SMTP không kiểm tra địa chỉ của người gửi và cho phép gửi email ẩn danh, bạn không cần cung cấp địa chỉ smtp thực. Bạn có thể gửi email thay mặt cho bất kỳ địa chỉ email nào);
  • Tới - địa chỉ email của người nhận;
  • SMTPServer –Địa chỉ của máy chủ SMTP mà bạn muốn gửi email.
Nếu bạn đặt địa chỉ máy chủ thư trong $ PSEmailServer biến môi trường, bạn không cần chỉ định địa chỉ máy chủ SMTP trong lệnh ghép ngắn Send-MailMessage.

Lệnh PowerShell đơn giản sau sẽ gửi một email với chủ đề và nội dung được chỉ định cho nhiều người nhận.

Send-MailMessage -Từ '[email protected]' -To '[email protected]', '[email protected]' -Subject "Test Email Alert" -Body "Đây là nội dung email" –SmtpServer 'smtp.woshub.com'

Để giúp chỉnh sửa các thuộc tính của một lệnh ghép ngắn dễ dàng hơn, lệnh gửi email có thể được biểu diễn như sau:

Send-MailMessage `
-SmtpServer smtp.woshub.com '
-To' [email protected] ',' [email protected] ''
-Từ 'ps- [email protected] ''
-Subject "Test" `
-Body" Gửi email bằng PowerShell "`
-Encoding 'UTF8'

Lưu ý rằng trong lệnh cuối cùng, chúng tôi cũng đặt mã hóa UTF8 cho email. Ngược lại, nếu chủ đề hoặc nội dung email chứa các ký tự không phải ANSI, chúng sẽ được hiển thị không chính xác.

Theo mặc định, mã hóa ANSI và ASCII được sử dụng trong Windows PowerShell. Nếu bạn đã cập nhật phiên bản PS của mình lên PowerShell Core, hãy nhớ rằng phiên bản này đã sử dụng mã hóa UTF-8 theo mặc định.

Theo mặc định, lệnh ghép ngắn Send-MailMessage cố gắng gửi email qua cổng SMTP tiêu chuẩn TCP 25. Nếu máy chủ SMTP của bạn chỉ cho phép gửi email bằng giao thức được mã hóa, bạn có thể chỉ định số cổng (thường xuyên nhất là 465 hoặc 587 ) và UseSsl tùy chọn:

-SmtpServer 'smtp.woshub.com' -Port 465 –UseSsl

Bảng bên dưới hiển thị các thông số máy chủ SMTP của các nhà cung cấp email công cộng phổ biến mà bạn có thể sử dụng để gửi thư từ PowerShell (lưu ý rằng bạn sẽ phải cho phép gửi email qua SMTP trong giao diện tài khoản):

Tên Địa chỉ máy chủ SMTP Cổng Loại mã hóa
Gmail smtp.gmail.com 587

25

465

TLS

TLS

SSL

Office 365 smtp.office365.com 587 TLS
Outlook.com smtp-mail.outlook.com 587 TLS
Yahoo smtp.mail.yahoo.com 587 TLS
Thư iCloud smtp.mail.me.com 587 TLS
AOL smtp.aol.com 465 SSL

Nếu máy chủ SMTP cấm gửi email ẩn danh (chuyển tiếp bị từ chối), bạn sẽ thấy lỗi này:

5.7.1 Client was not authenticated.

Sau đó, bạn có thể xác thực trên máy chủ SMTP bằng – Thông tin đăng nhập tùy chọn.

Bạn có thể tương tác yêu cầu thông tin đăng nhập của người dùng để xác thực:

Send-MailMessage …… - Thông tin xác thực (Get-Credential)

Send-MailMessage:Gửi email từ PowerShell

Ngoài ra, bạn có thể chỉ định tài khoản được sử dụng để xác thực trong biến:

$ cred =Lấy thông tin đăng nhập
Gửi-Thư tín ... - Thông tin đăng nhập $ credit

Nếu bạn muốn lưu mật khẩu để kết nối trực tiếp với máy chủ SMTP trong tập lệnh PowerShell, hãy sử dụng cú pháp sau:

$ mypasswd =ConvertTo-SecureString "smP @ ssdw0rrd2" -AsPlainText -Force
$ mycreds =New-Object System.Management.Automation.PSCredential ("[email protected]", $ mypasswd)
Send-MailMessage ... –Credential $ mycreds

Xem bài viết Sử dụng thông tin đăng nhập đã lưu một cách an toàn trong tập lệnh PowerShell.

Nếu bạn muốn thêm tệp đính kèm vào email của mình, hãy sử dụng –Attachments Lựa chọn. Trong ví dụ dưới đây, chúng tôi sẽ gửi một email ở định dạng HTML và đính kèm file1.txt và install.log từ đĩa cục bộ. Chúng tôi sẽ sử dụng máy chủ SMTP của Gmail (trước tiên, bạn cần tạo mật khẩu ứng dụng trong Gmail và sử dụng nó để xác thực smtp thay vì mật khẩu Gmail của bạn):

$ MailMessage =@ {
To ="[email protected]"
Bcc ="[email protected]", "[email protected]"
From ="smtpsender1 @ gmail.com "
Subject =" Báo cáo máy chủ DC "
Body ="

Chào mừng bạn!

Đã tạo: $ (Lấy ngày - Định dạng g)


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

Đây là cách email ở định dạng HTML có tệp đính kèm trông như thế nào trong giao diện Gmail.

Send-MailMessage:Gửi email từ PowerShell

Bạn có thể định cấu hình thông báo gửi (đã đọc biên nhận) cho một email bằng cách sử dụng -DeliveryNotificationOption . Thông báo gửi cho phép bạn được thông báo nếu người nhận nhận được email.

Các loại thông báo có sẵn là:

  • Thành công (Thông báo nếu giao hàng thành công)
  • OnFailure (Thông báo nếu giao hàng không thành công)
  • Độ trễ (Thông báo nếu giao hàng bị chậm trễ)