Отправить электронную почту через SMTP, не меняя домен отправителя? - PullRequest
0 голосов
/ 23 октября 2011

У меня есть небольшой скрипт, который я написал, чтобы отправить электронное письмо примерно 200 клиентам. Проблема в том, что скрипт работает на небольшом хостинг-сайте, и мне нужно использовать адрес электронной почты моей компании в качестве отправителя. Это было бы хорошо, за исключением большинства, если не все мои клиенты имеют надежные фильтры спама, которые блокируют мое сообщение, если домен отправителя не совпадает с доменом адреса электронной почты отправителя (иначе, я размещаю скрипт в 'примере. com, но мой адрес электронной почты: "business@company.com".

Я пробовал SMTP'ng в учетной записи gmail и отправлял таким образом (в качестве теста, прежде чем отправить его из электронного письма компании), но, похоже, он не работает, у него все еще есть все заголовки моего домена .

Есть предложения, что я делаю не так? Есть ли другой способ сделать это?

Код SMTP, который я использую:

if (!$this->valid_mail_adresses) return; 

//connect to the host and port
$smtpConnect = fsockopen($this->smtpServer, $this->port, $errno, $errstr, $this->timeout);
$smtpResponse = fgets($smtpConnect, 4096);
if(empty($smtpConnect))
{
    $this->msg[] = "Failed to connect: $smtpResponse";
    var_dump($this->msg);
    return;
}
else
{
    $logArray['connection'] = "<p>Connected to: $smtpResponse";
    echo "<p />connection accepted<br>".$smtpResponse."<p />Continuing<p />";
}

//you have to say HELO again after TLS is started
fputs($smtpConnect, "HELO $localhost". $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['heloresponse2'] = "$smtpResponse";

//request for auth login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authrequest'] = "$smtpResponse";

//send the username
fputs($smtpConnect, base64_encode($this->username) . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authusername'] = "$smtpResponse";

//send the password
fputs($smtpConnect, base64_encode($this->password) . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authpassword'] = "$smtpResponse";

//email from
fputs($smtpConnect, "MAIL FROM: <{$this->from_mail}>" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['mailfromresponse'] = "$smtpResponse";

//email to
fputs($smtpConnect, "RCPT TO: <$this->mail_to>" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['mailtoresponse'] = "$smtpResponse";

//the email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['data1response'] = "$smtpResponse";


$mail_message = $this->mail_body; 
if (count($this->att_files) > 0)
{ 
    foreach ($this->att_files as $val)
        $mail_message .= $val; 
    $mail_message .= "--".$this->uid."--"; 
} 
    if (mail($this->mail_to, $this->mail_subject, $mail_message, $this->mail_headers)) { 
        $this->msg[] = "Your mail is succesfully submitted."; 
} else
    $this->msg[] = "Error while sending you mail."; 


//construct headers
//$headers = "MIME-Version: 1.0" . $newLine;
//$headers .= "Content-type: multipart/mixed; boundary=\"{$this->uid}\" charset=iso-8859-1" . $newLine;
$headers .= $this->mail_headers;
//$headers .= "To: {$this->to_name} <{$this->mail_to}>" . $newLine;
//$headers .= "From: {$this->name_from} <$from>" . $newLine;

$message = "To: {$this->mail_to}\r\nFrom: {$this->from_mail}\r\nSubject: {$this->mail_subject}\r\n$headers\r\n\r\n{$this->mail_body}\r\n";
if (count($this->att_files) > 0)
{ 
    foreach ($this->att_files as $val)
        $message .= $val; 
    $message .= "--".$this->uid."--"; 
} 
echo $message;
print_r($logArray);
//observe the . after the newline, it signals the end of message
//fputs($smtpConnect, $message);
//$smtpResponse = fgets($smtpConnect, 4096);
//$logArray['data2response'] = "$smtpResponse";

// say goodbye
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['quitresponse'] = "$smtpResponse";
$logArray['quitcode'] = substr($smtpResponse,0,3);
fclose($smtpConnect);
//a return value of 221 in $retVal["quitcode"] is a success
return($logArray);

1 Ответ

1 голос
/ 23 октября 2011

Вы можете попробовать использовать SwiftMailer, который обрабатывает практически все части отправки электронной почты практически любым способом. Включая вход в учетную запись электронной почты и отправку через нее. Он написан на PHP, поэтому вы можете просматривать / изменять код.

http://swiftmailer.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...