smtp: Allow RCPT TO command to fail for some recipients

Introduces CURLOPT_MAIL_RCPT_ALLLOWFAILS.

Verified with the new tests 3002-3007

Closes #4816
This commit is contained in:
Pavel Volgarev 2020-01-14 17:22:38 -05:00 committed by Daniel Stenberg
parent 23a17e039d
commit 4a4609bf3c
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
22 changed files with 483 additions and 26 deletions

View file

@ -208,4 +208,5 @@ test2078 \
test2080 \
test2100 \
\
test3000 test3001
test3000 test3001 \
test3002 test3003 test3004 test3005 test3006 test3007

55
tests/data/test3002 Normal file
View file

@ -0,0 +1,55 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with multiple and invalid (first) --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3002 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3002
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<recipient.two@example.com>
RCPT TO:<recipient.three@example.com>
RCPT TO:<recipient.four@example.com>
RCPT TO:<recipient.five@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another
body
.
</upload>
</verify>
</testcase>

55
tests/data/test3003 Normal file
View file

@ -0,0 +1,55 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with multiple and invalid (last) --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3003 --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3003
MAIL FROM:<sender@example.com>
RCPT TO:<recipient.one@example.com>
RCPT TO:<recipient.two@example.com>
RCPT TO:<recipient.three@example.com>
RCPT TO:<recipient.four@example.com>
RCPT TO:<invalid.five>
DATA
QUIT
</protocol>
<upload>
From: different
To: another
body
.
</upload>
</verify>
</testcase>

55
tests/data/test3004 Normal file
View file

@ -0,0 +1,55 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with multiple and invalid (middle) --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3004 --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3004
MAIL FROM:<sender@example.com>
RCPT TO:<recipient.one@example.com>
RCPT TO:<recipient.two@example.com>
RCPT TO:<invalid.three>
RCPT TO:<recipient.four@example.com>
RCPT TO:<recipient.five@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another
body
.
</upload>
</verify>
</testcase>

55
tests/data/test3005 Normal file
View file

@ -0,0 +1,55 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with multiple and invalid (all but one) --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3005 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3005
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<recipient.two@example.com>
RCPT TO:<invalid.three>
RCPT TO:<invalid.four>
RCPT TO:<invalid.five>
DATA
QUIT
</protocol>
<upload>
From: different
To: another
body
.
</upload>
</verify>
</testcase>

51
tests/data/test3006 Normal file
View file

@ -0,0 +1,51 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with multiple invalid (all) --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3006 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt invalid.two --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 3006
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<invalid.two>
RCPT TO:<invalid.three>
RCPT TO:<invalid.four>
RCPT TO:<invalid.five>
QUIT
</protocol>
</verify>
</testcase>

47
tests/data/test3007 Normal file
View file

@ -0,0 +1,47 @@
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
smtp
</server>
<name>
SMTP with invalid --mail-rcpt and --mail-rcpt-allowfails
</name>
<stdin>
From: different
To: another
body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/3007 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-from sender@example.com -T -
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 3007
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
QUIT
</protocol>
</verify>
</testcase>