Mail göndermede sorun: BAD_ENC_HEADER=3.1

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mail göndermede sorun: BAD_ENC_HEADER=3.1

Mesaj gönderen naile » 22 Şub 2007 06:24

Mail gönderimi için Indy 10 kullanıyorum. Gönderim esnasında gönderen kişinin adı ve mail adresini iki ayrı editten okuyorum. Gönderim için ayrı ayrı şunları denedim:

1.

Kod: Tümünü seç

with idMessage1 do
begin
  From.Name := EditName.Text;
  From.Adress := EditAdres.Text;
end;
2.

Kod: Tümünü seç

with idMessage1 do
  From. Text := EditName.Text + '<'+EditAdres.Text+'>';
Bu ikisini kullandığımda gönderilen mailin spam statusunda BAD_ENC_HEADER=3.1 değeri çıkıyor. Ama şu şekilde yazarsam bir sorun olmuyor

3.

Kod: Tümünü seç

with idMessage1 do
  From. Text :='Naile' + '<naile@domain>';
Editlerden yazdırdığımda neden bunu yapıyor anlamadım. Editleri birleştirirken ayrı bir değişkene atadım, trim kullandım ama sorun gitmedi. Elle adımı ve mailimi yazınca eklemiyor bad_enc_header ı, editlerden yazdırınca ekliyor. O da gönderdiğim maillerin spama düşmesine sebep olabiliyor.

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ » 23 Şub 2007 08:41

Selamlar Naile,

Şuna bir dikkat eder misin.

Senin adında "i" harfi var !... Başımıza şöyle bir şey gelmişti. Report Builder'da bir tool hazırladım. Kullanıcı tanımlı raporlar yapıldı yüzlerce ama Ingiltere kullanıcılarında çok tuhaf bir biçimde ama sadece onlarda, Delphi kodu içerisinde bir raporların M$-SQL Server üzerinde oluşturduğumuz sanal directoryler içinde bir raporun adını (kullanıcı veriyor bu ismi) içinde "i" geçiyor diye sayfa bomboş çıkıyordu.

Encodingleri veya benzeri bir noktayı Indy10 componentlerde BUG'lı üretmiş olabilirler mi?

Naile değilde adının içinde sadece ingilizce harfler olan bir e-posta ve isim bulup denesene. Belki de character encoding ile alakalı olarak bir şeyden dolayı yapıyor (zırvalıyor) olabilir.

Bu sadece bir fikir. Sorun budur diyemiyorum ama dene bakalım.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ » 23 Şub 2007 08:49

Selamlar Naile,

Internete de bi baktım, dediğim gibi MIME Encoding ile ilgili olarak, Default Encodinginden kaynaklanan bi problem.

Ben mail gönderirken ISO8854-4 idi galiba onu kullanıyorum. Set Encoding gibi bişileri olacak. Oradan yapılıyordu (bi event te içine değer atıyorduk. Eğer öyle yapmazsan algılamıyordu Indy9'da.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 23 Şub 2007 10:47

Merhaba Adnan abi, şimdi dediğin şekilde inceledim. O bahsettiğin karakter kodlamasını kullanıyorum. Kullandığım şekil şöyle:

Kod: Tümünü seç

procedure TFMailGonder.MsgInitializeISO(var VTransferHeader: TTransfer;
  var VHeaderEncoding: Char; var VCharSet: String);
begin
  VCharSet := 'iso-8859-9';
end;
Ben de yorumundan yola çıkarak Gönderen ismi olarak bir Türkçe karakter kullanarak bir de kullanmyarak mail gönderdim, sonuç değişmedi. Ama subject kısmında Türkçe karakter kullandığımda Bad_enc_header varken, subjectte Türkçe karakter kullanmadan gönderdiğim mailde çıkmadı. Yani sorun subjectten kaynaklanıyor. Bunun için karakter kodlamasını kodun içine de ekledim ama birşey değişmedi:

Kod: Tümünü seç

 with idMessage1 do begin
    Clear;
    ContentType := 'iso-8859-9';
    From.Text := EIsim.Text + ' <'+EMail.Text+'>';
    Subject := EKonu.Text;
  end;
Bunun için konuya yazılan Türkçe karakterleri değiştirmeden nasıl bir çözüm bulabilirim sizce?

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 23 Şub 2007 11:03

Ya bence bunun ne yaptığı belli olmuyor. Türkçe karakter kullanıpta Bad headerı eklemediği gibi Türkçe karakter kullanmadığım zaman bad headırı eklediği de oluyor. Neyden değişiyor anlamıyorum, denemelerim devam ediyor ama bu kadar basit birşeyin böyle uğraştırması hele de neyden kaynaklandığını bulamamak insanı gerçekten çok yoruyor.

Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 02:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari » 23 Şub 2007 11:58

@Naile bende INDY 10 bileşenin de bu hata ile karşılaştım.

Kod: Tümünü seç

procedure TSform.MailMessageInitializeISO(var VTransferHeader: TTransfer;
  var VHeaderEncoding: Char; var VCharSet: String);
begin
VCharSet := 'iso-8859-9';
end;
Denedim ama bende bu hatayı verdi.

Kod: Tümünü seç

[Error] Siparis.pas(276): Undeclared identifier: 'TTransfer'
InitializeISO ya girmeden
Direk buton da bu kodu kullandığımda ise

Kod: Tümünü seç

MailMessage.CharSet:='iso-8859-9'
Yine Türkçe karakter hatalı ve Message Metnini ise bir dat dosya oluşturarak gönderdi. dat dosyanın içeriği düzgündü ama..

Encoding = meMIME olarak kullanıyorum.
Daha Fazla Kurcalamadım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 23 Şub 2007 12:08

Evet, bilmem kaç kez denemeden sonra anladım ki; subject kısmında kullanılan cümlede ilk kelimeden sonraki kelimelerde Türkçe karakter varsa (ilk kelimedekini takmıyor nedense) veya son kelimeden sonra boşluk yapılmışsa (trim kullanmamın faydası olmadı) BAD_ENC_HEADER ı ekliyor. Görünen o ki Türkçe karakterleri kaldırmadan sorun hallolmayacak ya da başka bir önerisi olan var mı?

Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 08:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose » 23 Şub 2007 12:21

mrh,
ben aşağıda verdiğim kodlarla dosya ilavesi de dahil email göndermede hata almadım.

Kod: Tümünü seç

     IdMessage.Clear;
     IdMessage.From.Text                :=Edt_Gonderen.Text;
     IdMessage.ReplyTo.EMailAddresses   :=Edt_Gonderen.Text;
     IdMessage.Recipients.EMailAddresses:=Edt_Alici.Text;
     IdMessage.Date    :=Date;
     IdMessage.Subject :=Edt_Konu.Text;
     IdMessage.Priority:=mpNormal;
yani gönderen kısmına sadece email adresi yazdım, +isim eklemedim.

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 23 Şub 2007 12:48

Tamam ama gönderen kısmında busefer ismim yerine mail adresi görünür ki bunu istemezler.

Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 08:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose » 23 Şub 2007 12:57

mrh,
tek text içine:
Adı Soyadı <Emailadresi@mynet.com>
olarak denedim gönderen kısmında sadece isim çıkıyor.

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 23 Şub 2007 01:05

Ben de o şekilde yapıyorum:

From.text := Ad Soyad <mail@domain>

Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 08:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose » 23 Şub 2007 01:26

az önce aşağıdaki kod ile adı ve email adresini ayrı ayrı editlere yazarak tekrar denedim, yine sorunsuz gönderdi, Mynet edresime
üstelik adımda Ü harfi vardı

Kod: Tümünü seç

     IdMessage.Clear;
     IdMessage.From.Text                :=Edt_GonAdi.Text+'<'+Edt_GonEmail.Text+'>';
     IdMessage.ReplyTo.EMailAddresses   :=Edt_GonEmail.Text;
     IdMessage.Recipients.EMailAddresses:=Edt_Alici.Text;
     IdMessage.Date    :=Date;
     IdMessage.Subject :=Edt_Konu.Text;
     IdMessage.Priority:=mpNormal;
yalnız benim indy ver. 9.00 farkedermi bilmiyorum.

Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 02:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari » 23 Şub 2007 01:41

ben bu şekilde deniyorum.

Kod: Tümünü seç

   SMTP.Host := 'mail.serverim.com';
   SMTP.Port := 25;
   MailMessage.From.Address :='gonderen@server.com';
   MailMessage.Recipients.EMailAddresses := 'alici@server.com' ;
   MailMessage.Subject := ''+OYQueryFISNO.Value+''' nolu Satınalma Siparişiniz!!!''';
   MailMessage.Body.Text := datetostr(DATE2.date) +'Tarihinde' ;    MailMessage.Body.Add('Siparişiniz Onaylanmıştır.') ;    MailMessage.Body.Add('Takip ediniz!!') ;
Bu şekilde gönderimde Türkçe karakterler problemli
mail adresi kısmında Ad soyad çıkıyor.

Kod: Tümünü seç

MailMessage.CharSet:='iso-8859-9';
bunu eklersem, Body kısmı için dat dosya oluşturup ileti eki yapıyor.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim

Cevapla