Отправка международной почты из командной строки с помощью msmtp

Я создал следующий код для отправки электронного письма с адреса, установленного в формате UTF-8. Я знаю, что msmtp поддерживает IDN, но когда я запускаю эту программу, я получаю сообщение об ошибке, что символ \xe2\x82\xac (также известный как «€») недействителен.

msmtp: envelope from address relu\u20ac@4p\u20ac.com not accepted by the server
msmtp: server message: 555 5.5.2 Syntax error. p83sm6227819wma.18 - gsmtp
msmtp: could not send mail (account default from /usr/local/etc/msmtprc)

Это код:

#include <stdio.h>
int main(){
    char* sender = "relu\xe2\x82\xac@4p\xe2\x82\xac.com";
    char cmd[100];
    sprintf(cmd, "echo \"bla\" | msmtp -f %s [email protected]", sender);
    system(cmd);    
    return 0;
}

person Relu Dragan    schedule 15.07.2016    source источник


Ответы (1)


Похоже, ваша среда не понимает, что вы даете ей сложные символы. Убедитесь, что вы анализируете символы как юникод. Если вы попытаетесь проанализировать значение Unicode как ascii, вы получите довольно странные результаты.

Возможно, вы захотите изучить возможность использования wchar_t вместо char*.

person nmg49    schedule 15.07.2016
comment
На самом деле, когда я использую printf(%s\n, sender); правильно выводит адрес на консоль (отображает символ "евро"). - person Relu Dragan; 15.07.2016