Egy (egyelőre kezdetleges állapotban lévő) automatikus mail küldést csináltam expect segítségével ami nagyjából működik is.
Azért csak nagyjából, mert néhány ékezetes karaktert nem akar átvinni, helyette '?'-t ír ki.
A script:
expect << EOF
set timeout 10
spawn telnet $smtpaddress $smtpport
expect "SMTP"
send "ehlo teszt\r"
expect "AUTH"
send "auth login\r"
expect "334"
send "$maile\r"
expect "334"
send "$mailpasswd\n"
expect "235"
send "mail from: <$mailfrom>\r"
expect "250"
send "rcpt to: <$mailto>\r"
expect "250"
send "data\r"
expect "354"
send "$text\r"
expect ""
send ".\r"
expect "250"
send "quit\r"
exit
EOF
A $text tartalmazza a szöveget amiben természetesen benne vannak az őŐűŰ karakterek is. Minden más bash és perl script tökéletesen kezeli az ékezeteket, ez viszont nem.
A teszt szöveg tartalma:
árvíztűrő tükörfúrógép
áéíóöőúüűÁÉÍÓÖŐÚÜŰ
És ami átmegy mailban:
árvízt?r? t?körfúrógép
áéíóö?úü?ÁÉÍÓÖ?ÚÜ?
Ami még fontos, hogy ha olyan helyre írom be az expecten belül a szöveget ahol lehet látni (pl a loginnál), akkor már eleve ott is '?' van.
Help pls!
- 1340 megtekintés
Hozzászólások
A konzolod, amin gépelsz, UTF8.
Az expected meg nem tud UTF8-at.
De még ha tudna is, ki lennél vele segítve: mert az SMTP protokoll nem kezeli az UTF8-at direktben.
Erre a problémára használatos a MIME. Tehát a leveled, a $text, nem tartalmazhat UTF8-as karaktereket, azokat előtte szépen MIME-ba kell csomagolni. Ha meg mai lheaderbe akarsz ilyet rakni, ott meg a quoted-printable a megoldás.
Szóval tessék összeismerkedni az SMTP protokollal.
- A hozzászóláshoz be kell jelentkezni
Nem UTF8, hanem sima ISO8859-2 van a konzolon is. Ha a $text valtozoba beteszem a szoveget akkor abban tokeletesen ott vannak az ekezetek. Az expect valamiert mar a $text-bol rosszul olvassa ki es az smtp szervernek is eleve ?-el kuldi.
-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!
- A hozzászóláshoz be kell jelentkezni
az tök mindegy, a levélbe quoted printable kódolás kell, vagy minimum érvényes charsetes mime header.
- A hozzászóláshoz be kell jelentkezni
Mindegy, hogy konkrétan melyik karakterkészletet használod; a probléma lényege, hogy egynél több karakterkészlet létezik, és közöttük valaki implicit konvertál, a konverziónál pedig elvesznek azok a karakterek, amik a cél karakterkészletben nincsenek benne.
Az SMTP szervernek 7-bites US-ASCII-t kell küldeni, ha nem akarsz bajt. Akkor viszont úgyis be kell csomagolnod az ékezetes cuccaidat, onnantól meg az expectnek is mindegy lesz.
Tehát a megoldás: korrektül előre kódolt SMTP levelet kell előállítani (MIME + quoted printable a Subject sorban).
- A hozzászóláshoz be kell jelentkezni