Để 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.
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.
$ 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
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)
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
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):
Đã tạo: $ (Lấy ngày - Định dạng g) $ 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!
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.
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ễ)