Skip to main content

Opencart SMTP Mail Sorunu

Opencart SMTP mail sorunu yaşıyorsanız doğru yerdesiniz.Çok sık  rastlanan problemlerden biri olan mail problemi  opencart kullanıcıların bir hayli canını sıkmaktadır.Opencart’da mail problemi yaşıyorsanız sebebi genelikle ;

– Yanlış mail ayarları kullanımı ( port vs)

-Yeni çıkan opencart versiyonlarda yapılan fonksiyon hataları

– Hosting firmalarının uyguladığı katı mail protokol ayarları ( bazen bir hosting firmasında sorunsuz çalışan mail fonksiyonu başka bir hosting firmasında çalışmamaktadır )

Üstelik yanlış ayarlarla,problemli fonksiyonlarla  mail problemi yaşadığınızda sisteminizin bir çok kısmında hatalar alabilirsiniz.Panik yapmanıza gerek yok  , opencart mail smtp sorununu çözdüğümüzde tüm problemler ortadan kalkacaktır. Örnek hata görseli ;

sytnax-error

” SyntaxError: Unexpected end of JSON input ” hatası.

Gelelim problemin çözümüne.Öncelikle smtp mail ayarlarımız doğru mu kontrol edelim.Örnek opencart smtp mail ayarları aşağıdadır(webmail smtp için).

Sistem>Mağazalar>Düzenle>E-Posta yollarını izliyoruz.

opencart-smtp-mail-ayarlari

İşlemleri gerçekleştirdikten sonra sistemimizi kontrol edelim.(örnek üye kaydı , alışveriş oluşturarak vs.).

Eğer problem hala devam ediyorsa mail dosyamızı değiştirmekte çözümü arayacağız ;

system > library > mail.php yollarını izleyip mail.php dosyasını buluyoruz.Kodları aşagıdaki kodlarla değiştiriyoruz ve kaydediyoruz ;


<?php
class Mail {
protected $to;
protected $from;
protected $sender;
protected $replyto;
protected $subject;
protected $text;
protected $html;
protected $attachments = array();
public $protocol = 'mail';
public $smtp_hostname;
public $smtp_username;
public $smtp_password;
public $smtp_port = 587;
public $smtp_timeout = 5;
public $newline = "\n";
public $verp = false;
public $parameter = '';

public function __construct($config = array()) {
foreach ($config as $key => $value) {
if ($value) {
$this->$key = $value;
}
}
}

public function setTo($to) {
$this->to = html_entity_decode($to, ENT_QUOTES, 'UTF-8');
}

public function setFrom($from) {
$this->from = html_entity_decode($from, ENT_QUOTES, 'UTF-8');
}

public function setSender($sender) {
$this->sender = html_entity_decode($sender, ENT_QUOTES, 'UTF-8');
}

public function setReplyTo($reply_to) {
$this->replyto = html_entity_decode($reply_to, ENT_QUOTES, 'UTF-8');
}

public function setSubject($subject) {
$this->subject = html_entity_decode($subject, ENT_QUOTES, 'UTF-8');
}

public function setText($text) {
$this->text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
}

public function setHtml($html) {
$this->html = html_entity_decode($html, ENT_QUOTES, 'UTF-8');
}

public function addAttachment($filename) {
$this->attachments[] = $filename;
}

public function send() {
if (!$this->to) {
trigger_error('Error: E-Mail to required!');
exit();
}

if (!$this->from) {
trigger_error('Error: E-Mail from required!');
exit();
}

if (!$this->sender) {
trigger_error('Error: E-Mail sender required!');
exit();
}

if (!$this->subject) {
trigger_error('Error: E-Mail subject required!');
exit();
}

if ((!$this->text) && (!$this->html)) {
trigger_error('Error: E-Mail message required!');
exit();
}

if (!$this->replyto) {
$this->setReplyTo($this->sender);
}

if (is_array($this->to)) {
$to = implode(',', $this->to);
} else {
$to = $this->to;
}

$boundary = '----=_NextPart_' . md5(time());

$header = 'MIME-Version: 1.0' . $this->newline;

if ($this->protocol != 'mail') {
$header .= 'To: ' . $to . $this->newline;
$header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline;
}

$header .= 'Date: ' . date('D, d M Y H:i:s O') . $this->newline;
$header .= 'From: =?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;
$header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->replyto) . '?=' . ' <' . $this->from . '>' . $this->newline;
$header .= 'Return-Path: ' . $this->from . $this->newline;
$header .= 'X-Mailer: PHP/' . phpversion() . $this->newline;
$header .= 'Content-Type: multipart/related; boundary="' . $boundary . '"' . $this->newline . $this->newline;

if (!$this->html) {
$message = '--' . $boundary . $this->newline;
$message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline;
$message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;
$message .= $this->text . $this->newline;
} else {
$message = '--' . $boundary . $this->newline;
$message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline;
$message .= '--' . $boundary . '_alt' . $this->newline;
$message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline;
$message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;

if ($this->text) {
$message .= $this->text . $this->newline;
} else {
$message .= 'This is a HTML email and your email client software does not support HTML email!' . $this->newline;
}

$message .= '--' . $boundary . '_alt' . $this->newline;
$message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline;
$message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;
$message .= $this->html . $this->newline;
$message .= '--' . $boundary . '_alt--' . $this->newline;
}

foreach ($this->attachments as $attachment) {
if (file_exists($attachment)) {
$handle = fopen($attachment, 'r');

$content = fread($handle, filesize($attachment));

fclose($handle);

$message .= '--' . $boundary . $this->newline;
$message .= 'Content-Type: application/octet-stream; name="' . basename($attachment) . '"' . $this->newline;
$message .= 'Content-Transfer-Encoding: base64' . $this->newline;
$message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . $this->newline;
$message .= 'Content-ID: <' . basename(urlencode($attachment)) . '>' . $this->newline;
$message .= 'X-Attachment-Id: ' . basename(urlencode($attachment)) . $this->newline . $this->newline;
$message .= chunk_split(base64_encode($content));
}
}

$message .= '--' . $boundary . '--' . $this->newline;

if ($this->protocol == 'mail') {
ini_set('sendmail_from', $this->from);

if ($this->parameter) {
mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter);
} else {
mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header);
}
} elseif ($this->protocol == 'smtp') {
$is_tls = substr($this->smtp_hostname, 0, 3) == 'tls';
$hostname = $is_tls ? substr($this->smtp_hostname, 6) : $this->smtp_hostname;
$handle = fsockopen($hostname, $this->smtp_port, $errno, $errstr, $this->smtp_timeout);

if (!$handle) {
trigger_error('Error: ' . $errstr . ' (' . $errno . ')');
exit();
} else {
if (substr(PHP_OS, 0, 3) != 'WIN') {
socket_set_timeout($handle, $this->smtp_timeout, 0);
}

while ($line = fgets($handle, 515)) {
if (substr($line, 3, 1) == ' ') {
break;
}
}

fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 250) {
trigger_error('Error: EHLO not accepted from server!');
exit();
}

if ($is_tls) {
fputs($handle, 'STARTTLS' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 220) {
trigger_error('Error: STARTTLS not accepted from server!');
exit();
}

stream_socket_enable_crypto($handle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
}

if (!empty($this->smtp_username) && !empty($this->smtp_password)) {
fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 250) {
trigger_error('Error: EHLO not accepted from server!');
exit();
}

fputs($handle, 'AUTH LOGIN' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 334) {
trigger_error('Error: AUTH LOGIN not accepted from server!');
exit();
}

fputs($handle, base64_encode($this->smtp_username) . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 334) {
trigger_error('Error: Username not accepted from server!');
exit();
}

fputs($handle, base64_encode($this->smtp_password) . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 235) {
trigger_error('Error: Password not accepted from server!');
exit();
}
} else {
fputs($handle, 'HELO ' . getenv('SERVER_NAME') . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 250) {
trigger_error('Error: HELO not accepted from server!');
exit();
}
}

if ($this->verp) {
fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . "\r\n");
} else {
fputs($handle, 'MAIL FROM: <' . $this->from . '>' . "\r\n");
}

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 250) {
trigger_error('Error: MAIL FROM not accepted from server!');
exit();
}

if (!is_array($this->to)) {
fputs($handle, 'RCPT TO: <' . $this->to . '>' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
trigger_error('Error: RCPT TO not accepted from server!');
exit();
}
} else {
foreach ($this->to as $recipient) {
fputs($handle, 'RCPT TO: <' . $recipient . '>' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) {
trigger_error('Error: RCPT TO not accepted from server!');
exit();
}
}
}

fputs($handle, 'DATA' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 354) {
trigger_error('Error: DATA not accepted from server!');
exit();
}

// According to rfc 821 we should not send more than 1000 including the CRLF
$message = str_replace("\r\n", "\n", $header . $message);
$message = str_replace("\r", "\n", $message);

$lines = explode("\n", $message);

foreach ($lines as $line) {
$results = str_split($line, 998);

foreach ($results as $result) {
if (substr(PHP_OS, 0, 3) != 'WIN') {
fputs($handle, $result . "\r\n");
} else {
fputs($handle, str_replace("\n", "\r\n", $result) . "\r\n");
}
}
}

fputs($handle, '.' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 250) {
trigger_error('Error: DATA not accepted from server!');
exit();
}

fputs($handle, 'QUIT' . "\r\n");

$reply = '';

while ($line = fgets($handle, 515)) {
$reply .= $line;

if (substr($line, 3, 1) == ' ') {
break;
}
}

if (substr($reply, 0, 3) != 221) {
trigger_error('Error: QUIT not accepted from server!');
exit();
}

fclose($handle);
}
}
}
}

(Yedeğinizi almayı unutmayınız.) Bu işlemden sonra smtp mail sorunu düzelecektir.Son olarak tekrar kontrolleri sağlayınız.Geçmiş olsun…

 

Opencart SMTP Mail Sorunu” hakkında 1 yorum

  1. Allah razı olsun. dünyanın yazısı makalesi 3 aydır yapmadığım işlem kalmamıştı. çok çok teşekkür ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.