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);
[b] fprintf(fs, "Subject: %s\n", Alias);[/b]
for (i = 400; i < 450; i++) {
if (html_text[i] == NULL)
break;
if ((*(html_text[i]) == ' ') || (*(html_text[i]) == '\t') || (!(*(html_text[i]))))
continue;[/quote]
Wszelkie uwagi mile widziane.
Pozdrawiam
;-)Ostatnio edytowany przez Jacekalex (2011-09-29 18:22:25)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
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 [url]http://developer.gnome.org/glib/2.28/glib-Base64-Encoding.html#g-base64-encode[/url]
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));
Offline
[quote=ponury_kostek]Możesz użyć g_base64_encode [url]http://developer.gnome.org/glib/2.28/glib-Base64-Encoding.html#g-base64-encode[/url]
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));
[/quote]
Nie tylko może, a wręcz powinien. Bo niby skąd klient ma wiedzieć, że temat listu jest w UTF-8?
Offline
[quote=NIC]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);
[/quote]
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 /[/quote]
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
[quote=Minio][quote=ponury_kostek]Możesz użyć g_base64_encode [url]http://developer.gnome.org/glib/2.28/glib-Base64-Encoding.html#g-base64-encode[/url]Kod:
fprintf(fs, "Subject: =?UTF-8?B?%s?=\n", g_base64_encode(Alias, strlen(Alias)));[/quote]
[b]Nie tylko może, a wręcz powinien. Bo niby skąd klient ma wiedzieć, że temat listu jest w UTF-8?[/b][/quote]
Może np z [url=http://www.faqs.org/rfcs/rfc2047.html]tego dokumentu[/url]?
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'.
[b] encoded-word = "=?" charset "?" encoding "?" encoded-text "?="[/b]
charset = token ; see section 3
encoding = token ; see section 4[/quote]
@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)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)Offline
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00091 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.135.202.38' WHERE u.id=1 |
0.00088 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.135.202.38', 1732508299) |
0.00045 | SELECT * FROM punbb_online WHERE logged<1732507999 |
0.00079 | DELETE FROM punbb_online WHERE ident='18.188.119.67' |
0.00073 | DELETE FROM punbb_online WHERE ident='3.137.219.68' |
0.00066 | SELECT topic_id FROM punbb_posts WHERE id=182199 |
0.00058 | SELECT id FROM punbb_posts WHERE topic_id=19786 ORDER BY posted |
0.00055 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=19786 AND t.moved_to IS NULL |
0.00009 | SELECT search_for, replace_with FROM punbb_censoring |
0.00082 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=19786 ORDER BY p.id LIMIT 0,25 |
0.00071 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=19786 |
Total query time: 0.00731 s |