2010-05-28 75 views
10

Tôi đang sử dụng .NET 3.5 và tôi muốn tự động gửi thư. Tôi hiện đang sử dụng như sau:Gửi E-Mail bằng C#

Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
    (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem(
    Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 
mailMsg.To = recipient; 
mailMsg.Subject = subject; 
mailMsg.Body = body; 
mailMsg.Send(); 

Tuy nhiên, tôi đã tìm thấy một số điều mà dường như ngụ ý tôi nên sử dụng các phương pháp sau đây:

System.Net.Mail.MailMessage mailMsg = new System.Net.Mail.MailMessage(); 
mailmsg.To = recipient; 
mailmsg.Subject = subject; 
mailmsg.Body = body; 

bất cứ ai có thể cho tôi biết những gì là sự khác biệt giữa hai không gian tên nếu, và tại sao bạn có thể muốn sử dụng một không gian tên khác?

Trả lời

9

Ví dụ thứ hai cần có máy chủ SMTP, để tạo kết nối trực tiếp và sử dụng máy chủ SMTP này để gửi email. Nó có chi phí thấp, thường sẽ hoạt động.

Nếu bạn cần soạn & gửi email về hành vi của người dùng hiện tại, bạn có thể sử dụng triển vọng.

Cho đến nay, tôi chỉ thấy các câu trả lời có bất lợi cho triển vọng. Nhưng nó có một vài ưu điểm:

  • Bạn không phải hỏi người dùng về bất kỳ cấu hình nào.
    • Outlook đã biết các máy chủ Exchange/SMTP,
    • và địa chỉ email của người dùng
  • email bạn gửi sẽ được lưu trữ trong gửi-mục danh sách của người dùng. Vì vậy, người dùng có thể thấy wat được gửi trong tên của mình.
  • Tiện ích bổ sung ký/mã hóa email gửi đi hoặc thêm tuyên bố từ chối trách nhiệm chuẩn sẽ được sử dụng, vì vậy bạn sẽ tuân thủ chính sách của công ty
  • Có thể nhắc người dùng nếu được phép gửi email (có, đây có thể là lợi thế)
  • Bạn có thể chọn chỉ soạn thư, trình bày nó cho người dùng. Người dùng có thể chỉnh sửa và chọn gửi hay không.

Edit: tôi sử dụng phương pháp SMTP cho việc gửi email kỹ thuật (như file log & thông báo lỗi) để đơn vị hỗ trợ của chúng tôi, các thư đi ra ngoài nhanh chóng và không được chú ý.

Phương pháp Outlook tôi sử dụng để gửi thư trên người dùng của tôi đến người khác. Những thư này chậm, nhưng có thể theo dõi, v.v.

3

Đầu tiên sử dụng COM interop, đây là chi phí không cần thiết. Thứ hai là tinh khiết. Net với tất cả các tính năng của nó. Cộng với nó là linh hoạt hơn.

10

Điều đầu tiên, tôi giả sử, yêu cầu Outlook được cài đặt trong máy sao cho lắp ráp Office Interop được cài đặt. Cái thứ hai là khung .Net thuần túy.

+3

Cũng cần lưu ý rằng chi phí cho triển vọng instantiating không phải là tầm thường. – Paddy

5

Phương pháp đầu tiên là sử dụng interop bằng cách tạo một thể hiện của Outlook (outlookApplication) và có trường hợp đó của Outlook gửi e-mail.

Thứ hai được sử dụng để gửi e-mail qua SMTP cũ thông thường và không yêu cầu triển vọng.

Trừ khi bạn có nhu cầu cụ thể cho interop không cần phải gửi e-mail bằng cách sử dụng outlook (và mã của bạn sẽ không hoạt động trên bất kỳ máy nào không có triển vọng cài đặt).

1

Người đầu tiên đang sử dụng MS Office mà bạn không muốn xuất bản trong khi System.Net.Mail có sẵn khi .Net framework được cài đặt.

1

Ví dụ đầu tiên sử dụng thư viện được cài đặt bằng cách tải xuống Office Interop Assemblies.

Ví dụ thứ hai sử dụng thư viện được cài đặt theo mặc định với .NET framework, System.Net.

Ví dụ đầu tiên sử dụng Microsoft Interop Libraries. Tôi sẽ đi với ví dụ thứ hai của bạn, vì nó là một phần của cài đặt .NET mặc định. Các thư viện Interop sẽ có thêm chi phí không cần thiết.

1

Microsoft.Office sử dụng Microsoft Outlook để gửi email. Nó đòi hỏi Outlook phải được cài đặt, và là (ít nhất là lần cuối cùng tôi đã thử gửi thư theo cách này) dễ bị khó khăn hơn. (Ví dụ: nó nhắc người dùng thông báo cho họ biết rằng chương trình đang cố gửi thư thay cho họ, v.v.)

System.Net.Mail chỉ sử dụng .NET thuần túy và máy chủ SMTP được chỉ định để gửi thư. Hãy tin tôi .. Tránh sử dụng Văn phòng trừ khi có nhu cầu.

+0

Có một ứng dụng được gọi là ClickYes loại bỏ cửa sổ bật lên pesky (Hoặc nhấp vào thay mặt bạn). Liên kết là http://www.contextmagic.com/express-clickyes/. Tôi phải nói rằng tôi đồng ý với bạn 100% về chiến lược System.Net.Mail thay vì sử dụng Outlook hoặc Outlook Plug-Ins. Các wrappers lái xe cho tôi xung quanh uốn cong. – Koekiebox

1

Bạn cần sử dụng tùy chọn thứ hai vào bất kỳ ngày nào. Đó là tinh khiết .NET.

Nếu bạn sử dụng tùy chọn đầu tiên, tôi đoán Outlook đã được cài đặt trong máy đó. Khi bạn triển khai, bạn sẽ gặp sự cố nếu bạn không cài đặt MS Office trong máy chủ.

2

Chúng khác nhau. MailItem đại diện cho mục tin nhắn trong Outlook. MailMessage đại diện cho một tin nhắn e-mail có thể được gửi bằng cách sử dụng lớp SmtpClient.

Kiểm tra MailItemMailMessage.

2

Đầu tiên là sử dụng COM Interop và sử dụng Outlook làm cơ sở của nó. Nó cần triển vọng cấu hình. Thứ hai là sử dụng SMTP Client. Các interop có thể chạy bạn vào các vấn đề liên quan đến triển vọng, nhưng sẽ cho phép đối với một số tính năng thú vị như mở một cửa sổ Mail (nhưng nó thường không có giá trị nó). Thứ hai sẽ gửi thư im lặng, mặc dù bạn có thể hiển thị một số cửa sổ của riêng bạn, nhưng nó vẫn sẽ không cho phép tính linh hoạt của Outlook Automation. Sự lựa chọn của tôi là System.Net.Mail. *.

3

Như người khác đã đề cập, người đầu tiên sử dụng triển vọng để gửi email. Điểm bất lợi là người dùng phải có triển vọng được cài đặt; lợi thế là nó sẽ trông giống như triển vọng đang gửi nó.

Phương pháp thứ hai sẽ cố gắng gửi thư trực tiếp. Ưu điểm là nó không đòi hỏi phải được cài đặt, và chi phí thấp hơn rất nhiều. Những bất lợi với tùy chọn này là hầu hết các doanh nghiệp những ngày này chặn cổng 25, vì vậy khi bạn cố gắng gửi tin nhắn, nó sẽ thất bại.