2012-05-27 31 views
6

Yerel bir posta sunucusundan (hMailServer) e-posta göndermek için .NET'te SmtpClient ve MailMessage classes'u kullanarak, gönderilen iletinin Message-ID başlık değerini almanın hiçbir yolunu bulamadım.SmtpClient ile gönderilen bir e-posta mesajının "Mesaj Kimliği" ni yakalamak mümkün mü?

programlı teslim edilemeyen mesajlar ulaşmaya çalışıyorum, bu yüzden belli bir mesaj reddeder hedef SMTP sunucusundan cevap tanımlamak için bir yol bulmak zorunda

arkasındaki fikir.

Şimdi sadece Message-ID SMTP başlık değerini hatırlamayı ve bu kimlik için gelen e-postaları ayrıştırmayı düşündüm.

İletiyi gönderdikten sonra Headers collection incelemeye çalıştım ancak Message-ID bulamadım.

Sorum

benim SMTP sunucusu MailMessage örneğinin gönderilmesi sırasında ekler Message-ID başlık değeri elde etmek mümkün mü?

Güncelleme başarıyla elle sadece göndermeden önce, başıma bir Message-ID oluşturmak için çalıştık this example gereğince 2012-05-27

.

Tüm örneklerim şu ana kadar çalışıyor, bu yüzden görünüyor ki bu benim soruna bir çözüm.

+1

Kimlik, SMTP sunucusu tarafından atanmış olduğundan eminim ve SMTP protokolü, bu değeri istemciye döndürmeyi belirtmiyor. Bunun bir yolu, kontrol ettiğiniz bir hesaba aynı mesajı BCC'ye gönderir ve mesaj kimliğinin ilk SMTP sunucusunda bir kez üretildiğini varsayarak, bu mesajdaki mesaj kimliğini çıkarır. Başka bir olasılık e-postaya özel bir "X-tag" eklemektir. –

+0

Teşekkürler, @JeremyHolovacs - Özel bir etiket eklemeyi denedim ("X-" öneki ile değil). Bu mesaj iletilirken veya iletilirken kaybolur. –

+1

Ne yazık ki bunun için http://stackoverflow.com/questions/7095104/how-to-confirm-that-mail-has-been-delivered-ve- not kurşun geçirmez bir yöntem yoktur. –

cevap

2

Sorununuza verilen standart çözüm VERP'dir. Bernstein'ın orijinal makalesinin nedenini öğrenmek için Message-Id ve diğerlerini okuyun. güvenilir değildir. http://cr.yp.to/proto/verp.txt

+1

GMail ile VERP nasıl yapılacağını anlamaya çalışıyorum ... GMail, kimliği doğrulanmış hesaptaki (artı adresiniz kimliği doğrulanmış e-posta adresine dayanıyor olsa bile) e-postayla geçersiz kıldığından artı adresleri kullanarak gönderilemiyor. – MikeJansen

+1

@MikeJansen: Bir sorunuz varsa, bir soru gönderin. – tripleee

+1

Üzgünüm, neden bu yorumu gönderdiğimi bilmiyorum. Gerçekten ne buldum gmail ile VERP yapamazsınız. Bu gönderi bulduğum şeyi özetler: http://stackoverflow.com/questions/9925392/does-gmail-not-allow-sender-to-set-a-return-path-value-to-receive-bounce-message . Başka bir SMTP sunucusu, kendi veya başka bir sağlayıcı kullanmam gerekecek. – MikeJansen

2

E-postayı göndermeden önce kendi mesaj kimliğinizi ekleyebilirsiniz. Ben message.Headers.InReplyTo özelliğini kontrol, ben OpenPop.Net kullanmak indir mesajlar için ve Sended mesaj kimliği vardır:

Guid id = Guid.NewGuid(); //Save the id in your database 
mensajeEmail.Headers.Add("Message-Id", String.Format("<{0}@{1}>",id.ToString(),"mail.example.com")); 

Not: Bir sonraki kodu kullanabilirsiniz.

İlgili konular