2010-09-09 40 views
10

Tôi đang viết một chương trình gửi tin nhắn email và muốn biết khi nào người nhận nhận được email tôi đã gửi cho anh ấy. Làm cách nào tôi có thể thực hiện việc này bằng API JavaMail?Tôi làm cách nào để có thể xác nhận lại email được gửi bằng JavaMail API?

Nếu tôi sử dụng SMTPMessage, cách chính xác để giải quyết kết quả sau khi tôi đã đặt các tùy chọn thông báo?

SMTPMessage smtpMsg = new SMTPMessage(msg); 
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS); 

Trả lời

1

vui lòng xem câu trả lời của tôi tại đây (khi câu hỏi này được hỏi về ruby ​​trên đường ray). Tis về cơ bản cùng một câu trả lời.

Email open notification - ruby on rails

18

Không có cách nào tiêu chuẩn để làm điều này đó là chấp nhận và vinh danh trên bảng. Tuy nhiên, tôi thấy rằng bạn có một số tùy chọn:

  • Thêm tiêu đề "Trả lại-tiếp nhận" với địa chỉ email của bạn trong giá trị. Nếu người nhận e-mail có một khách hàng nhận danh hiệu tiêu đề này, thì biên nhận trả lại sẽ được gửi cho bạn khi e-mail được mở. Điều này là không đáng tin cậy, nhớ bạn, vì người dùng luôn có thể quyết định không gửi biên lai, ngay cả khi anh ta có một khách hàng hỗ trợ nó.

  • Thêm hình ảnh vào e-mail tải từ máy chủ của bạn và đặt thông số trên hình ảnh bao gồm địa chỉ email của người dùng. Khi tải e-mail, hình ảnh sẽ tải từ máy chủ của bạn. Viết một tập lệnh thu thập thông số e-mail và sau đó cung cấp một hình ảnh trống. Điều này cũng không đáng tin cậy, tuy nhiên, khi nhiều ứng dụng thư khách nhắc người dùng nếu họ muốn tải xuống hình ảnh và họ luôn có thể chọn không. Ngoài ra, một số ứng dụng e-mail (chủ yếu là cũ hơn) không hỗ trợ hình ảnh.

  • Có lẽ cách đáng tin cậy nhất là không bao gồm thư trong e-mail của bạn cả. Chỉ bao gồm liên kết tới trang web có thể đọc thư và bao gồm địa chỉ email của họ hoặc mã duy nhất trong liên kết. Bằng cách này, bạn biết chính xác ai đã đọc tin nhắn. Tất nhiên, điều này có nhược điểm là mọi người không thực sự nhận được thư trong hộp thư đến của họ và họ cũng có thể chọn không truy cập trang web để đọc nó.

Cuối cùng, tôi nghĩ bạn sẽ phải đưa ra một giải pháp sáng tạo để giải quyết vấn đề này, trừ khi bạn hài lòng nhận được kết quả nổi bật.

+0

Cảm ơn! Bây giờ tôi đang đọc về SMTPMessage (http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/SMTPMessage.html) và có lẽ đó là một giải pháp cho vấn đề của tôi. –

+0

Một thông báo trên SMTPMessage sẽ thông báo cho bạn về việc gửi thành công tới máy chủ hộp thư của người nhận, không phải trên máy tính để bàn của họ hoặc họ đọc nó. –

+0

oh, tôi đã mắc lỗi, xin lỗi. Tôi có nghĩa là tôi cần một thông báo khi tin nhắn được gửi. –

0

Bạn có thể sử dụng thông báo SMTP và yêu cầu trạng thái phân phối (Tôi không biết nếu nó đến khi nhà cung cấp nhận thư hoặc nếu người dùng mở thư). JavaMail không hỗ trợ trực tiếp các tính năng trực tiếp và bạn phải đọc RFC 3464. Tôi cũng tìm thấy chủ đề này với các ví dụ nhưng không thử nó javamail

Bạn cũng có thể nhìn vào websina

1

Có một cách tiếp cận khác để tìm hiểu xem email đã được nhận hay chưa, nó nhận được email chưa được gửi. Tôi đã thấy một triển khai Java khá tốt here.

Họ đã sử dụng javax.mail (để xử lý thư) và ổi (để xử lý chuỗi và bộ sưu tập).

2

Ok, đây là một cuộc thảo luận cũ, nhưng:

Tôi đã tìm thấy một giải pháp đơn giản và làm việc here (liên kết trong Tây Ban Nha).

Bạn chỉ cần thêm một trường nữa vào tiêu đề của thư. Để đạt được điều này, bạn phải sử dụng phương thức addHeader của lớp Part, được thực hiện bởi lớp Message. Phương thức này nhận được 2 tham số, typevalue tiêu đề.

Để có được xác nhận, bạn phải thêm tiêu đề này:

Disposition-Notification-To 

value là qua đường bưu điện nơi mà chúng tôi muốn gửi câu trả lời xác nhận:

message.addHeader("Disposition-Notification-To","[email protected]"); 

Chú ý: lưu ý rằng , hiện nay, rất nhiều máy chủ thư như gmail đang loại bỏ yêu cầu này, vì vậy điều này sẽ không có hiệu lực, nhưng, nếu bạn chắc chắn (như tôi) máy chủ nhận cho phép điều này, sẽ hoạt động như một sự quyến rũ.

1

Chỉ thêm hình ảnh giả với bộ hiển thị thành không có trong thông điệp của bạn. Và đặt thuộc tính src của hình ảnh này vào url bạn muốn gọi

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