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/.







Podobno człowiek...;)








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)
Offline


Członek DUG
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

Użytkownik


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




Użyszkodnik
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







Podobno człowiek...;)








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)
Offline