У меня есть небольшой скрипт, который я написал, чтобы отправить электронное письмо примерно 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);