2009-09-21 83 views
12

Tôi đang tạo tập lệnh PowerShell để tự động hóa quy trình tại cơ quan. Quá trình này yêu cầu một email để điền vào và gửi cho người khác. Các email sẽ luôn luôn theo cùng một loại mẫu tuy nhiên nó có thể sẽ không bao giờ giống nhau mỗi lần vì vậy tôi muốn tạo một bản nháp email trong Outlook và mở cửa sổ email để các chi tiết bổ sung có thể được điền vào trước khi gửi.Tạo thư nháp email Outlook bằng PowerShell

Tôi đã thực hiện một chút tìm kiếm trực tuyến nhưng tất cả những gì tôi có thể tìm thấy là một số mã để gửi email một cách âm thầm. Mã như sau:

$ol = New-Object -comObject Outlook.Application 
$mail = $ol.CreateItem(0) 
$Mail.Recipients.Add("[email protected]") 
$Mail.Subject = "PS1 Script TestMail" 
$Mail.Body = " 
Test Mail 
" 
$Mail.Send() 

Tóm lại, có ai biết cách tạo và lưu bản nháp email Outlook mới và mở ngay bản nháp đó để chỉnh sửa không?

+0

bất kỳ tập lệnh mẫu mã nguồn cuối cùng nào? – Kiquenet

Trả lời

22
$olFolderDrafts = 16 
$ol = New-Object -comObject Outlook.Application 
$ns = $ol.GetNameSpace("MAPI") 

# call the save method yo dave the email in the drafts folder 
$mail = $ol.CreateItem(0) 
$null = $Mail.Recipients.Add("[email protected]") 
$Mail.Subject = "PS1 Script TestMail" 
$Mail.Body = " Test Mail " 
$Mail.save() 

# get it back from drafts and update the body 
$drafts = $ns.GetDefaultFolder($olFolderDrafts) 
$draft = $drafts.Items | where {$_.subject -eq 'PS1 Script TestMail'} 
$draft.body += "`n foo bar" 
$draft.save() 

# send the message 
#$draft.Send() 
+0

Tuyệt vời! Cảm ơn. Đó là chủ yếu được thực hiện nó! Có thể tạo kịch bản tự động mở cửa sổ nháp để các bit thủ công cuối cùng có thể được điền vào trước khi gửi không? – Jason

+0

+1 Để nhận bản nháp được tạo và lưu - tất cả những gì bạn cần bây giờ là hiển thị nó ... –

+0

np :) gọi phương thức hiển thị: $ draft.Display() –

5

Tôi nghĩ câu trả lời của Shay Levy gần như ở đó: chỉ thiếu một chút là hiển thị mục. Để làm điều này, bạn chỉ cần có để có được những đối tượng thanh tra có liên quan và nói với nó để hiển thị bản thân, như sau:

$inspector = $draft.GetInspector 
$inspector.Display() 

Xem sự giúp đỡ MSDN trên GetInspector cho hành vi fancier.

+0

Tuyệt vời !!! Phần cuối cùng! Cảm ơn bạn đã giúp đỡ! – Jason

19

Dựa trên câu trả lời khác, tôi đã cắt xuống mã một chút và sử dụng

$ol = New-Object -comObject Outlook.Application 

$mail = $ol.CreateItem(0) 
$mail.Subject = "<subject>" 
$mail.Body = "<body>" 
$mail.save() 

$inspector = $mail.GetInspector 
$inspector.Display() 

này loại bỏ các bước không cần thiết thu hồi thư từ thư mục bản thảo. Ngẫu nhiên, nó cũng loại bỏ một lỗi xảy ra trong mã của Shay Levy khi hai thư nháp có cùng chủ đề.

1

Tôi cũng nghĩ rằng tôi cũng nên thêm vào điều này. Có một vài bước bạn có thể tự cứu mình nếu bạn biết nhiều điều cơ bản (chủ đề, người nhận hoặc các khía cạnh khác). Trước tiên hãy tạo mẫu của email và lưu mẫu đó, ví dụ: một nơi nào đó có thể với mã?

Đối với chính mã, nó giống với nhiều mã mà những người khác đã đăng.

vay từ Jason:

$ol = New-Object -comObject Outlook.Application 
$msg = $ol.CreateItemFromTemplate(<<Path to template file>>) 

Sửa khi cần thiết. Thêm trường hoặc sửa đổi nội dung. Tin nhắn vẫn có thể được xem trước khi gửi cùng một cách $msg.GetInspector.Display(). Sau đó, gọi $msg.send() để gửi đi!

Các vấn đề liên quan