Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Chcę poprawić jeden błąd w qmailadminie, polegający na braku obsługi utf8 w module autoresponder.
Kod jest dość prosty, tylko nigdzie nie widzę, jak w iconv kodować nagłówki maila.
W php sprawa jest banalnie prosta:
<?php $subjecttext = "zażółć gęślą jaźń"; $settings = array( "scheme" => 'B', "input-charset" => 'UTF-8'); $subject = iconv_mime_encode("Subject", $subjecttext, $settings);
?>
Tylko ja to potrzebuję w języku C, wsadzić tutaj:
/*
* Make the autoresponder message file
*/
sprintf(TmpBuf, "%s/message", TmpBuf2);
if ( (fs = fopen(TmpBuf, "w")) == NULL ) ack("150", TmpBuf);
fprintf(fs, "From: %s@%s\n", ActionUser,Domain);
fprintf(fs, "Subject: %s\n", Alias);
for (i = 400; i < 450; i++) {
if (html_text[i] == NULL)
break;
if ((*(html_text[i]) == ' ') || (*(html_text[i]) == '\t') || (!(*(html_text[i]))))
continue;
Wszelkie uwagi mile widziane.
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2011-09-29 18:22:25)
Online
Coś takiego?
#include <iconv.h> iconv_handle = iconv_open ("UTF-8", "ASCII"); // ASCII? // TODO: error handling int result; int AliasLen; int utf8AliasLen; char *utf8Alias; AliasLen = strlen(Alias); utf8Alias = malloc(3 * AliasLen); result = iconv (iconv_handle, &Alias, &AliasLen, &utf8Alias, &utf8AliasLen); // TODO: error handling result = iconv_close (iconv_handle); // TODO: error handling //replace fprintf(fs, "Subject: %s\n", Alias); fwrite(fs, 9, 1, "Subject: "); fwrite(fs, utf8AliasLen, 1, utf8Alias); fwrite(fs, 1, 1, "\n"); free(utf8Alias);
Programowanie też jest spisane w man'ach:
http://www.manpagez.com/man/3/iconv/
http://www.manpagez.com/man/3/iconv_open/
Ostatnio edytowany przez NIC (2011-09-29 19:15:47)
Offline
Możesz użyć g_base64_encode http://developer.gnome.org/glib/2.28/glib-Base64-En … base64-encode
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));
Offline
ponury_kostek napisał(-a):
Możesz użyć g_base64_encode http://developer.gnome.org/glib/2.28/glib-Base64-En … base64-encode
Kod:
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));
Nie tylko może, a wręcz powinien. Bo niby skąd klient ma wiedzieć, że temat listu jest w UTF-8?
Offline
NIC napisał(-a):
Coś takiego?
Kod:
#include <iconv.h> iconv_handle = iconv_open ("UTF-8", "ASCII"); // ASCII? // TODO: error handling int result; int AliasLen; int utf8AliasLen; char *utf8Alias; AliasLen = strlen(Alias); utf8Alias = malloc(3 * AliasLen); result = iconv (iconv_handle, &Alias, &AliasLen, &utf8Alias, &utf8AliasLen); // TODO: error handling result = iconv_close (iconv_handle); // TODO: error handling //replace fprintf(fs, "Subject: %s\n", Alias); fwrite(fs, 9, 1, "Subject: "); fwrite(fs, utf8AliasLen, 1, utf8Alias); fwrite(fs, 1, 1, "\n"); free(utf8Alias);
wygląda ciekawie, spróbuję, choć na razie C ma dla mnie urok języka starochińskiego
Programowanie też jest spisane w man'ach:
http://www.manpagez.com/man/3/iconv/
http://www.manpagez.com/man/3/man /
Te many mam w kompie, i przejrzałem je dość dokładnie, ale nic ciekawego w nich nie wyczytałem.
Jednak po napisaniu 15% kalkulatora konsolowego w C++, to ja się za programistę nie uważam ;D
Minio napisał(-a):
ponury_kostek napisał(-a):
Możesz użyć g_base64_encode http://developer.gnome.org/glib/2.28/glib-Base64-En … base64-encode
Kod:
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));Nie tylko może, a wręcz powinien. Bo niby skąd klient ma wiedzieć, że temat listu jest w UTF-8?
Może np z tego dokumentu?
A konkretnie z tego fragmentu:
2. Syntax of encoded-words
An 'encoded-word' is defined by the following ABNF grammar. The
notation of RFC 822 is used, with the exception that white space
characters MUST NOT appear between components of an 'encoded-word'.
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
charset = token ; see section 3
encoding = token ; see section 4
@MInio, bardzo cenię Twoją znajmość perla, i zagadnień programowania, ale niektóre uwagi (jak cytowana powyżej) świadczą o twojej bystrości w nieco odmienny sposób.
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2011-09-29 22:59:47)
Online