From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use v5.26;
use strict;
sub text { 'policyviolation' }
sub description { 'Email rejected due to policy violation on a destination host' }
sub match {
# Try to match that the given text and regular expressions
# @param [String] argv1 String to be matched with regular expressions
# @return [Integer] 0: Did not match
# 1: Matched
# @since v4.22.0
my $class = shift;
my $argv1 = shift // return undef;
state $index = [
'an illegal attachment on your message',
'because the recipient is not accepting mail with ', # AOL Phoenix
'by non-member to a members-only list',
'closed mailing list',
'denied by policy',
'email not accepted for policy reasons',
'email rejected due to security policies',
'header are not accepted',
'header error',
'local policy violation',
'message bounced due to organizational settings',
'message given low priority',
'message not accepted for policy reasons',
'message rejected due to local policy',
'messages with multiple addresses',
'rejected for policy reasons',
'protocol violation',
'the email address used to send your message is not subscribed to this group',
'the message was rejected by organization policy',
'this message was blocked because its content presents a potential',
'we do not accept messages containing images or other attachments',
"you're using a mass mailer",
];
state $pairs = [
['you have exceeded the', 'allowable number of posts without solving a captcha'],
];
return 1 if grep { rindex($argv1, $_) > -1 } @$index;
return 1 if grep { Sisimai::String->aligned(\$argv1, $_) } @$pairs;
return 0;
}
sub true {
# The bounce reason is "policyviolation" or not
# @param [Sisimai::Fact] argvs Object to be detected the reason
# @return [Integer] 1: is policy violation
# 0: is not policyviolation
# @since v4.22.0
return undef;
}
1;
__END__
=encoding utf-8
=head1 NAME
Sisimai::Reason::PolicyViolation - Bounce reason is C<policyviolation> or not.
=head1 SYNOPSIS
use Sisimai::Reason::PolicyViolation;
print Sisimai::Reason::PolicyViolation->match('5.7.9 Header error'); # 1
=head1 DESCRIPTION
C<Sisimai::Reason::PolicyViolation> checks the bounce reason is C<policyviolation> or not.
This class is called only C<Sisimai::Reason> class.
This is the error that a policy violation was detected on the destination mail host. When the header
content or the format of the original message violates their security policies, or multiple addresses
exist in the C<From:> header, Sisimai will set C<policyviolation>.
Action: failed
Status: 5.7.0
Remote-MTA: DNS; gmail-smtp-in.l.google.com
Diagnostic-Code: SMTP; 552-5.7.0 Our system detected an illegal attachment on your message. Please
Last-Attempt-Date: Tue, 28 Apr 2009 11:02:45 +0900 (JST)
=head1 CLASS METHODS
=head2 C<B<text()>>
C<text()> method returns the fixed string C<policyviolation>.
print Sisimai::Reason::PolicyViolation->text; # policyviolation
=head2 C<B<match(I<string>)>>
C<match()> method returns C<1> if the argument matched with patterns defined in this class.
print Sisimai::Reason::PolicyViolation->match('5.7.9 Header error'); # 1
=head2 C<B<true(I<Sisimai::Fact>)>>
C<true()> method returns C<1> if the bounce reason is C<policyviolation>. The argument must be
<CSisimai::Fact> object and this method is called only from C<Sisimai::Reason> class.
=head1 AUTHOR
azumakuniyuki
=head1 COPYRIGHT
Copyright (C) 2017-2024 azumakuniyuki, All rights reserved.
=head1 LICENSE
This software is distributed under The BSD 2-Clause License.
=cut