Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No-ASCII character in email header #626

Closed
bukowski12 opened this issue Nov 19, 2022 · 16 comments · Fixed by #627
Closed

No-ASCII character in email header #626

bukowski12 opened this issue Nov 19, 2022 · 16 comments · Fixed by #627

Comments

@bukowski12
Copy link

Some servers which use Amavis denied emails from my server wit error
amavis[838601]: (838601-16) check_header: 2, Non-encoded non-ASCII data (and not UTF-8) (char E1 hex): Received: Header encoded (all-ASCII): X-Amavis-Alert: BAD HEADER SECTION, Non-encoded non-ASCII data (and not UTF-8)

I found that header in email contain non-ASCII characters and specifically is it czech day in date (Pá, Čt...)

Received: from mail.example.cz ([192.168.16.10] [192.168.16.10]) (no client certificate requested) by mail.example.cz (MailScanner Milter) with SMTP id 3F1D43402B2 for test@volny.cz; Pá, 18 lis 2022 13:17:30 +0100 (CET)

Its this code in MSMilter:

sub header_callback
{
...
my $datestring = strftime "%a, %e %b %Y %T %z (%Z)", localtime;
...
}

What is best solution?

@github-actions
Copy link

Thank you for submitting your first issue to MailScanner! We will respond to you soon!

@shawniverson
Copy link
Member

shawniverson commented Nov 20, 2022

We probably need to override the locale in this perl

use POSIX qw(setlocale);
use POSIX qw(strftime);
setlocale(POSIX::LC_ALL,'en_US.ISO8859-1');

@shawniverson
Copy link
Member

Preparing PR

@shawniverson shawniverson linked a pull request Nov 20, 2022 that will close this issue
@shawniverson
Copy link
Member

@bukowski12 Can you try this PR?

@bukowski12
Copy link
Author

Doesnt work, still czech day in datestamp. I have version 5.3.3 but it doesnt matter i hope.

@shawniverson
Copy link
Member

That must mean that localtime doesn't honor the locale override. Doing some research on this.

@shawniverson
Copy link
Member

@bukowski12 I made an adjustment to the PR, please try again and restart msmilter.

@bukowski12
Copy link
Author

Same problem.

@shawniverson
Copy link
Member

Yeah, same here, it is like it is completely ignored. Tried multiple different functions.

@shawniverson
Copy link
Member

I may have to build our own or find a similar non-localized function.

@shawniverson
Copy link
Member

Okay, I may have one, going to redo the PR and rebase.

@shawniverson
Copy link
Member

@bukowski12 This one uses DateTime, which, according to the perl docs, defaults to en_US. Give it a try.

@bukowski12
Copy link
Author

bukowski12 commented Nov 22, 2022

Problem, msmilter doesnt work:
Nov 22 10:10:48 mail-ul postfix/cleanup[3998699]: 647AE3401F7: milter-reject: END-OF-MESSAGE from unknown[192.168.16.220]: 4.7.1 Service unavailable - try again later;

DateTime::now('DateTime', 'time_zone', undef) called at /usr/sbin/MSMilter line 285

Problem with $tz variable?

lis 22 11:14:21 mail-ul.cz systemd[1]: Started LSB: MSMilter daemon. lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Use of uninitialized value $tz in string eq at /usr/local/lib64/perl5/DateTime.pm line 2256. lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Validation failed for type named NonEmptyStr declared in package Specio::Library::String (/usr/local/share/perl5/Specio/L> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Trace begun at Specio::Exception->new line 57 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Specio::Exception::throw('Specio::Exception', 'message', 'Validation failed for type named NonEmptyStr declared in packag> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: DateTime::TimeZone::_check_new_params('name', undef) called at /usr/local/share/perl5/DateTime/TimeZone.pm line 55 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: DateTime::TimeZone::new('DateTime::TimeZone', 'name', undef) called at /usr/local/lib64/perl5/DateTime.pm line 2262 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: DateTime::set_time_zone('DateTime=HASH(0x557c3a6924c0)', undef) called at /usr/local/lib64/perl5/DateTime.pm line 537 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: DateTime::from_epoch('DateTime', 'epoch', 1669112079, 'time_zone', undef) called at /usr/local/lib64/perl5/DateTime.pm li> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: DateTime::now('DateTime', 'time_zone', undef) called at /usr/sbin/MSMilter line 285 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: main::header_callback('Sendmail::PMilter::Context=HASH(0x557c3a68c2e8)', 'DKIM-Filter', 'OpenDKIM Filter v2.11.0 mail.ulk> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Sendmail::PMilter::Context::call_hooks('Sendmail::PMilter::Context=HASH(0x557c3a68c2e8)', 'header', 'DKIM-Filter', 'OpenD> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: eval {...} at /usr/share/MailScanner/perl/Sendmail/PMilter/Context.pm line 184 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Sendmail::PMilter::Context::main('Sendmail::PMilter::Context=HASH(0x557c3a68c2e8)') called at /usr/share/MailScanner/perl> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Sendmail::PMilter::__ANON__('IO::Socket::INET=GLOB(0x557c3a66cb68)') called at /usr/share/MailScanner/perl/Sendmail/PMilt> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Sendmail::PMilter::__ANON__('Sendmail::PMilter=HASH(0x557c3a66cb80)', 'IO::Socket::INET=GLOB(0x557c3a66afc8)', 'CODE(0x55> lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: Sendmail::PMilter::main('Sendmail::PMilter=HASH(0x557c3a66cb80)') called at /usr/sbin/MSMilter line 687 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: main::BEGIN at /usr/sbin/MSMilter line 701 lis 22 11:14:39 mail-ul.cz msmilter-init[4034947]: eval {...} at /usr/sbin/MSMilter line 701

@shawniverson
Copy link
Member

Apologies, I'm probably going to have to define $tz inside the callback. Fixing.

@shawniverson
Copy link
Member

@bukowski12 I moved the $tz into the header_callback in the PR, that should resolve the issue. Since these are callbacks the global variable didn't get set.

@bukowski12
Copy link
Author

It works! Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants