|
@@ -411,7 +411,17 @@ class Deliver_SMTP extends Deliver {
|
|
|
for ($i = 0, $cnt = count($to); $i < $cnt; $i++) {
|
|
|
if (!$to[$i]->host) $to[$i]->host = $domain;
|
|
|
if (strlen($to[$i]->mailbox)) {
|
|
|
- fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host.">\r\n");
|
|
|
+ // Ask for DSN if user has requested such and remote server supports it
|
|
|
+ if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) {
|
|
|
+ // TODO: Make the DSN parameters configurable by admin? user?
|
|
|
+ fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n");
|
|
|
+ // Retry without DSN fields for cranky MTAs
|
|
|
+ if ($this->errorCheck($tmp, $stream)) {
|
|
|
+ fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host.">\r\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host.">\r\n");
|
|
|
$tmp = fgets($stream, 1024);
|
|
|
if ($this->errorCheck($tmp, $stream)) {
|
|
|
return(0);
|
|
@@ -422,7 +432,17 @@ class Deliver_SMTP extends Deliver {
|
|
|
for ($i = 0, $cnt = count($cc); $i < $cnt; $i++) {
|
|
|
if (!$cc[$i]->host) $cc[$i]->host = $domain;
|
|
|
if (strlen($cc[$i]->mailbox)) {
|
|
|
- fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n");
|
|
|
+ // Ask for DSN if user has requested such and remote server supports it
|
|
|
+ if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) {
|
|
|
+ // TODO: Make the DSN parameters configurable by admin? user?
|
|
|
+ fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n");
|
|
|
+ // Retry without DSN fields for cranky MTAs
|
|
|
+ if ($this->errorCheck($tmp, $stream)) {
|
|
|
+ fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n");
|
|
|
$tmp = fgets($stream, 1024);
|
|
|
if ($this->errorCheck($tmp, $stream)) {
|
|
|
return(0);
|
|
@@ -433,7 +453,17 @@ class Deliver_SMTP extends Deliver {
|
|
|
for ($i = 0, $cnt = count($bcc); $i < $cnt; $i++) {
|
|
|
if (!$bcc[$i]->host) $bcc[$i]->host = $domain;
|
|
|
if (strlen($bcc[$i]->mailbox)) {
|
|
|
- fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host.">\r\n");
|
|
|
+ // Ask for DSN if user has requested such and remote server supports it
|
|
|
+ if ($rfc822_header->dsn && array_key_exists('DSN',$this->ehlo)) {
|
|
|
+ // TODO: Make the DSN parameters configurable by admin? user?
|
|
|
+ fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host."> NOTIFY=SUCCESS,DELAY,FAILURE\r\n");
|
|
|
+ // Retry without DSN fields for cranky MTAs
|
|
|
+ if ($this->errorCheck($tmp, $stream)) {
|
|
|
+ fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host.">\r\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host.">\r\n");
|
|
|
$tmp = fgets($stream, 1024);
|
|
|
if ($this->errorCheck($tmp, $stream)) {
|
|
|
return(0);
|