.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Sisimai::Reason 3pm" .TH Sisimai::Reason 3pm "2018-11-15" "perl v5.28.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Sisimai::Reason \- Detect the bounce reason .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Sisimai::Reason; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Sisimai::Reason detects the bounce reason from the content of Sisimai::Data object as an argument of \fBget()\fR method. This class is called only Sisimai::Data class. .SH "CLASS METHODS" .IX Header "CLASS METHODS" .ie n .SS """\f(CBget(Sisimai::Data Object)\fP""" .el .SS "\f(CW\fP\f(CBget(Sisimai::Data Object)\fP\f(CW\fP" .IX Subsection "get(Sisimai::Data Object)" \&\f(CW\*(C`get()\*(C'\fR detects the bounce reason. .ie n .SS """\f(CBanotherone(Sisimai::Data object)\fP""" .el .SS "\f(CW\fP\f(CBanotherone(Sisimai::Data object)\fP\f(CW\fP" .IX Subsection "anotherone(Sisimai::Data object)" \&\f(CW\*(C`anotherone()\*(C'\fR is a method for detecting the bounce reason, it works as a fall back method of \fBget()\fR and called only from \fBget()\fR method. .PP \&\f(CW\*(C`match()\*(C'\fR detects the bounce reason from given text as a error message. .ie n .SS """\f(CBmatch(String)\fP""" .el .SS "\f(CW\fP\f(CBmatch(String)\fP\f(CW\fP" .IX Subsection "match(String)" \&\f(CW\*(C`match()\*(C'\fR is a method for detecting the bounce reason from the string given as an argument of the method. However, this method is low analytical precision. .SH "LIST OF BOUNCE REASONS" .IX Header "LIST OF BOUNCE REASONS" \&\f(CW\*(C`Sisimai::Reason\-\*(C'\fR\fBget()\fR> detects the reason of bounce with parsing the bounced messages. The following reasons will be set in the value of \f(CW\*(C`reason\*(C'\fR property of Sisimai::Data instance. .ie n .SS """blocked""" .el .SS "\f(CWblocked\fP" .IX Subsection "blocked" This is the error that \s-1SMTP\s0 connection was rejected due to a client \s-1IP\s0 address or a hostname, or the parameter of \f(CW\*(C`HELO/EHLO\*(C'\fR command. This reason has added in Sisimai 4.0.0 and does not exist in any version of bounceHammer. .PP .Vb 3 \& : \& Connected to 192.0.2.112 but my name was rejected. \& Remote host said: 501 5.0.0 Invalid domain name .Ve .ie n .SS """contenterror""" .el .SS "\f(CWcontenterror\fP" .IX Subsection "contenterror" This is the error that a destination mail server has rejected email due to header format of the email like the following. Sisimai will set \f(CW\*(C`contenterror\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW\*(C`5.6.*\*(C'\fR. .IP "\- 8 bit data in message header" 4 .IX Item "- 8 bit data in message header" .PD 0 .IP "\- Too many XReceivedX headers" 4 .IX Item "- Too many XReceivedX headers" .IP "\- Invalid \s-1MIME\s0 headers" 4 .IX Item "- Invalid MIME headers" .PD .PP .Vb 4 \& ... while talking to g5.example.net.: \& >>> DATA \& <<< 550 5.6.9 improper use of 8\-bit data in message header \& 554 5.0.0 Service unavailable .Ve .ie n .SS """delivered""" .el .SS "\f(CWdelivered\fP" .IX Subsection "delivered" This is \s-1NOT AN ERROR\s0 and means the message you sent has delivered to recipients successfully. .PP .Vb 5 \& Final\-Recipient: rfc822; kijitora@neko.nyaan.jp \& Action: deliverable \& Status: 2.1.5 \& Remote\-MTA: dns; home.neko.nyaan.jp \& Diagnostic\-Code: SMTP; 250 2.1.5 OK .Ve .ie n .SS """exceedlimit""" .el .SS "\f(CWexceedlimit\fP" .IX Subsection "exceedlimit" This is the error that a message was rejected due to an email exceeded the limit. The value of D.S.N. is \f(CW5.2.3\fR. This reason is almost the same as \&\f(CW\*(C`MesgTooBig\*(C'\fR, we think. .PP .Vb 4 \& ... while talking to mx.example.org.: \& >>> MAIL From: SIZE=16600348 \& <<< 552 5.2.3 Message size exceeds fixed maximum message size (10485760) \& 554 5.0.0 Service unavailable .Ve .ie n .SS """expired""" .el .SS "\f(CWexpired\fP" .IX Subsection "expired" This is the error that delivery time has expired due to connection failure or network error and the message you sent has been in the queue for long time. .ie n .SS """feedback""" .el .SS "\f(CWfeedback\fP" .IX Subsection "feedback" The message you sent was forwarded to the sender as a complaint message from your mailbox provider. When Sismai has set \f(CW\*(C`feedback\*(C'\fR to the reason, the value of \f(CW\*(C`feedbacktype\*(C'\fR is also set like the following parsed data. .ie n .SS """filtered""" .el .SS "\f(CWfiltered\fP" .IX Subsection "filtered" This is the error that an email has been rejected by a header content after \&\s-1SMTP DATA\s0 command. In Japanese cellular phones, the error will incur that a sender's email address or a domain is rejected by recipient's email configuration. Sisimai will set \&\f(CW\*(C`filtered\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.2.0\fR or \f(CW5.2.1\fR. .PP This error reason is almost the same as UserUnknown. .PP .Vb 4 \& ... while talking to mfsmax.ntt.example.ne.jp.: \& >>> DATA \& <<< 550 Unknown user kijitora@ntt.example.ne.jp \& 554 5.0.0 Service unavailable .Ve .ie n .SS """hasmoved""" .el .SS "\f(CWhasmoved\fP" .IX Subsection "hasmoved" This is the error that a user's mailbox has moved (and is not forwarded automatically). Sisimai will set \f(CW\*(C`hasmoved\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.1.6\fR. .PP .Vb 2 \& : host mx1.example.go.jp[192.0.2.127] said: 550 5.1.6 recipient \& no longer on server: kijitora@example.go.jp (in reply to RCPT TO command) .Ve .ie n .SS """hostunknown""" .el .SS "\f(CWhostunknown\fP" .IX Subsection "hostunknown" This is the error that a domain part (Right hand side of @ sign) of a recipient's email address does not exist. In many case, the domain part is misspelled, or the domain name has been expired. Sisimai will set \f(CW\*(C`hostunknown\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce mail is \&\f(CW5.1.2\fR. .PP .Vb 1 \& Your message to the following recipients cannot be delivered: \& \& : \& <<< No such domain. .Ve .ie n .SS """mailboxfull""" .el .SS "\f(CWmailboxfull\fP" .IX Subsection "mailboxfull" This is the error that a recipient's mailbox is full. Sisimai will set \&\f(CW\*(C`mailboxfull\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW4.2.2\fR or \f(CW5.2.2\fR. .PP .Vb 3 \& Action: failed \& Status: 5.2.2 \& Diagnostic\-Code: smtp;550 5.2.2 ... Mailbox Full .Ve .ie n .SS """mailererror""" .el .SS "\f(CWmailererror\fP" .IX Subsection "mailererror" This is the error that a mailer program has not exited successfully or exited unexpectedly on a destination mail server. .PP .Vb 2 \& X\-Actual\-Recipient: X\-Unix; |/home/kijitora/mail/catch.php \& Diagnostic\-Code: X\-Unix; 255 .Ve .ie n .SS """mesgtoobig""" .el .SS "\f(CWmesgtoobig\fP" .IX Subsection "mesgtoobig" This is the error that a sent email size is too big for a destination mail server. In many case, There are many attachment files with email, or the file size is too large. Sisimai will set \f(CW\*(C`mesgtoobig\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.3.4\fR. .PP .Vb 2 \& Action: failure \& Status: 553 Exceeded maximum inbound message size .Ve .ie n .SS """networkerror""" .el .SS "\f(CWnetworkerror\fP" .IX Subsection "networkerror" This is the error that \s-1SMTP\s0 connection failed due to \s-1DNS\s0 look up failure or other network problems. This reason has added in Sisimai 4.1.12 and does not exist in any version of bounceHammer. .PP .Vb 2 \& A message is delayed for more than 10 minutes for the following \& list of recipients: \& \& kijitora@neko.example.jp: Network error on destination MXs .Ve .ie n .SS """norelaying""" .el .SS "\f(CWnorelaying\fP" .IX Subsection "norelaying" This is the error that \s-1SMTP\s0 connection rejected with error message \&\f(CW\*(C`Relaying Denied\*(C'\fR. This reason does not exist in any version of bounceHammer. .PP .Vb 4 \& ... while talking to mailin\-01.mx.example.com.: \& >>> RCPT To: \& <<< 554 5.7.1 : Relay access denied \& 554 5.0.0 Service unavailable .Ve .ie n .SS """notaccept""" .el .SS "\f(CWnotaccept\fP" .IX Subsection "notaccept" This is the error that a destination mail server does ( or can ) not accept any email. In many case, the server is high load or under the maintenance. Sisimai will set \f(CW\*(C`notaccept\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.3.2\fR or the value of \s-1SMTP\s0 reply code is 556. .ie n .SS """onhold""" .el .SS "\f(CWonhold\fP" .IX Subsection "onhold" Sisimai will set \f(CW\*(C`onhold\*(C'\fR to the reason of email bounce if there is no (or less) detailed information about email bounce for judging the reason. .ie n .SS """policyviolation""" .el .SS "\f(CWpolicyviolation\fP" .IX Subsection "policyviolation" This is the error that a policy violation was detected on a destination mail server. This reason has been divided from \f(CW\*(C`securityerror\*(C'\fR at Sisimai 4.22.0. .PP .Vb 1 \& 570 5.7.7 Email not accepted for policy reasons .Ve .ie n .SS """rejected""" .el .SS "\f(CWrejected\fP" .IX Subsection "rejected" This is the error that a connection to destination server was rejected by a sender's email address (envelope from). Sisimai set \f(CW\*(C`rejected\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.1.8\fR or the connection has been rejected due to the argument of \s-1SMTP MAIL\s0 command. .PP .Vb 3 \& : \& Connected to 192.0.2.225 but sender was rejected. \& Remote host said: 550 5.7.1 ... Access denied .Ve .ie n .SS """securityerror""" .el .SS "\f(CWsecurityerror\fP" .IX Subsection "securityerror" This is the error that a security violation was detected on a destination mail server. Depends on the security policy on the server, a sender's email address is camouflaged address. Sisimai will set \f(CW\*(C`securityerror\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW\*(C`5.7.*\*(C'\fR. .PP .Vb 3 \& 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 .Ve .ie n .SS """spamdetected""" .el .SS "\f(CWspamdetected\fP" .IX Subsection "spamdetected" This is the error that the message you sent was rejected by \f(CW\*(C`spam\*(C'\fR filter which is running on the remote host. This reason has added in Sisimai 4.1.25 and does not exist in any version of bounceHammer. .PP .Vb 4 \& Action: failed \& Status: 5.7.1 \& Diagnostic\-Code: smtp; 550 5.7.1 Message content rejected, UBE, id=00000\-00\-000 \& Last\-Attempt\-Date: Thu, 9 Apr 2008 23:34:45 +0900 (JST) .Ve .ie n .SS """suspend""" .el .SS "\f(CWsuspend\fP" .IX Subsection "suspend" This is the error that a recipient account is being suspended due to unpaid or other reasons. .ie n .SS """syntaxerror""" .el .SS "\f(CWsyntaxerror\fP" .IX Subsection "syntaxerror" This is the error that a destination mail server could not recognize \s-1SMTP\s0 command which is sent from a sender's \s-1MTA.\s0 This reason has been added at Sisimai v4.17.0. .IP "\- 503 Improper sequence of commands" 4 .IX Item "- 503 Improper sequence of commands" .PD 0 .IP "\- 504 Command parameter not implemented" 4 .IX Item "- 504 Command parameter not implemented" .PD .ie n .SS """systemerror""" .el .SS "\f(CWsystemerror\fP" .IX Subsection "systemerror" This is the error that an email has bounced due to system error on the remote host such as \s-1LDAP\s0 connection failure or other internal system error. .PP .Vb 3 \& : \& Unable to contact LDAP server. (#4.4.3)I\*(Aqm not going to try again; this \& message has been in the queue too long. .Ve .ie n .SS """systemfull""" .el .SS "\f(CWsystemfull\fP" .IX Subsection "systemfull" This is the error that a destination mail server's disk (or spool) is full. Sisimai will set \f(CW\*(C`systemfull\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW4.3.1\fR or \f(CW5.3.1\fR. .ie n .SS """toomanyconn""" .el .SS "\f(CWtoomanyconn\fP" .IX Subsection "toomanyconn" This is the error that \s-1SMTP\s0 connection was rejected temporarily due to too many concurrency connections to the remote server. This reason has added in Sisimai 4.1.26 and does not exist in any version of bounceHammer. .PP .Vb 2 \& : host mx02.example.ne.jp[192.0.1.20] said: \& 452 4.3.2 Connection rate limit exceeded. (in reply to MAIL FROM command) .Ve .ie n .SS """userunknown""" .el .SS "\f(CWuserunknown\fP" .IX Subsection "userunknown" This is the error that a local part (Left hand side of @ sign) of a recipient's email address does not exist. In many case, a user has changed internet service provider, or has quit company, or the local part is misspelled. Sisimai will set \&\f(CW\*(C`userunknown\*(C'\fR to the reason of email bounce if the value of Status: field in a bounce email is \f(CW5.1.1\fR, or connection was refused at \s-1SMTP RCPT\s0 command, or the contents of Diagnostic-Code: field represents that it is unknown user. .PP .Vb 3 \& : host mx01.example.co.jp[192.0.2.8] said: \& 550 5.1.1 Address rejected kijitora@example.co.jp (in reply to \& RCPT TO command) .Ve .ie n .SS """undefined""" .el .SS "\f(CWundefined\fP" .IX Subsection "undefined" Sisimai could not detect the error reason. In many case, error message is written in non-English or there are no enough error message in a bounce email to decide the reason. .ie n .SS """vacation""" .el .SS "\f(CWvacation\fP" .IX Subsection "vacation" This is the reason that the recipient is out of office. The bounce message is generated and returned from auto responder program. This reason has added in Sisimai 4.1.28 and does not exist in any version of bounceHammer. .ie n .SS """virusdetected""" .el .SS "\f(CWvirusdetected\fP" .IX Subsection "virusdetected" This is the error that an email was rejected by a virus scanner at a destination mail server. This reason has been divided from \f(CW\*(C`securityerror\*(C'\fR at Sisimai 4.22. .PP .Vb 2 \& Your message was infected with a virus. You should download a virus \& scanner and check your computer for viruses. \& \& Sender: \& Recipient: .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Sisimai::ARF .SH "AUTHOR" .IX Header "AUTHOR" azumakuniyuki .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (C) 2014\-2018 azumakuniyuki, All rights reserved. .SH "LICENSE" .IX Header "LICENSE" This software is distributed under The \s-1BSD\s0 2\-Clause License.