FatihGirgiç

Opencart Mail Sorunu

Opencart Mail Sorunu ve Çözümü

Opencart bashsettiğimiz gibi açık kaynak kodlu bir e-ticaret sistemidir. Ücretli e-ticaret yazılımlarının pahalı ve yüksek maliyetlere sahip olması nedeniyle bir çok kullanıcı açık kaynak kodlu olan opencart gibi sistemleri seçmektedirler. Beraberinde kendine ait ekosistemde bazı sorunlarla çok sık karşılaşılmaktadır. Bu yazımızda opencart üzerinden mail göndermeme hatası, opencart smtp mail ayarları, opencart mail sorunu ile ilgili detaylı bilgi ve opencart mail ayarları gibi detayları sizlere iletmeye çalışacağız.

Opencart Mail Sorunu

Öncelikle opencart sitenizin admin panelinden gerekli yapılandırmaları yapalım ya da yapmışsak bunları kontrol edelim. Admin panelinde solda yer alan “Sistem” menüsüne giriş yapalım. Açılan menüler arasında “Ayarlar” seçeneğine tıklayarak giriş sağlayalım. Karşımıza “Mağazalar” adlı sayfa gelecektir ve işlem yapacağımız mağaza üzerine gelip “Düzenle” butonuna tıklayarak opencart üzerindeki mağazamızın genel ayarlarına ulaşalım. Bu ayarlardan “E-Posta” sekmesini göreceksiniz, giriş yapıp, sunucunuzdan aldığınız e-posta bilgileri doğrultusunda bu sekmedeki ayarları dolduralım.

SMTP Hostname: mail.alanadınız.com ya da gelen posta kutusu yapılandırma mailinizde mevcuttur.
SMTP Username:kullanıcı@alanadınız.com
SMTP Password:Mail şifreniz
SMTP Port: E-posta kutusu yapılandırma mailinizde mevcuttur.

Tüm bu ayarları özenle yaptığınızdan emin olmalısınız. Hala opencart siparişlerinizde mail gitmiyor ise yani opencart mail sorunu yaşıyorsanız sunucu panelinizdeki dosya yöneticisi ya da ftp ile mail sistem dosyalarınızı düzenlemeniz gerekmektedir.

Opencart mail sorunu çözümü için public_html>system>library>mail.php dosyasına erişmelisiniz. cPanel üzerinden erişim sağlıyorsanız direk sağ tıklayıp düzenle diyebilirsiniz. Aşağıda verdiğim bilgilerin mail.php dosyanızda satır numaraları ile kontrol edin ve düzenlenmesi gereken yerleri düzenlemelisiniz.

16 public $newline = “/r/n”;

17 public $crlf = “/r/n”;

271. Satırda başlayan bilgi aşağıdaki gibi düzenlenmelisiniz.

271 if ($this->verp) {

272 fputs($handle, ‘MAIL FROM: <‘ . $this->username . ‘>XVERP’ . $this->crlf);

273 } else {

274 fputs($handle , ‘MAIL FROM: <‘ . $this->username . ‘>’ . $this->crlf);

Yukarıdaki işlemlerden sonra php mail ayarlarınız tamamlanmış olacaktır. Opencart php mail sorunu böylelikle çözüme kavuşmuş olacaktır. Eğer sitenizin mailini google ve ya yandex gibi bir araçla ile kullanıyorsanız ve mail sorunu yaşıyorsanız aşağıda opencart smtp mail sorunu ve çözümü ile ilgili başlığımızı okuyabilirsiniz.

Opencart SMTP Mail Sorunu

Opencart kullanıcıları özellikle smtp mail kullanıyorlar ise oldukça sık rastladıkları ve artık gına getiren bir sorundur. Herşey denense de çözülememesi artık umut kırıcı ve can sıkıcı olabilmektedir.Opencart smtp mail sorunu nedenleri olarak yanlış mail ayarları kullanımı, hosting firmalarının katı mail protokol ayarları ve güncellenmiş olan yeni versiyon opencartlarda fonksiyon hataları olarak sıralanabilir. Bu nedenler sitenizin bir çok alanında da hata almanıza neden olabilmektedir. Bu opencart smtp mail sorunu illetinden bu yazı ile kurtulabilirsiniz. Opencart smtp mail sorunu çözümüyle sitenizde aldığınız bir çok hatadan kurtulmuş olacaksınız.

” SyntaxError: Unexpected end of JSON input ” Hatası

Bu hata smtp mail kullanan opencart kullanıcıların oldukça sık başına gelen bir durumdur. Opencart smtp mail ayarlarını yapalım öncelikle.

Opencart Admin Paneli > Sistem > Mağazalar > Düzenle > E-posta yollarını takip ederek e-posta ayarlarımıza girelim ve gerekli bilgileri buraya girip kaydet butonuna basalım. Sonra tekrardan bir kontrol için üye kaydı ve ya opencart sipariş maili gelmiyor mu diye kontrol edelim. Eğer opencart smtp mail sorunu hala devam ediyorsa mail dosyalarımızı biraz kurcalayarak çözeceğiz.

Opencart smtp mail sorunu çözümü için de public_html>system>library>mail.php yolunu izleyerek mail ayarlarımıza ulaşıyoruz. Aşağıda vereceğim satır numaralarına dikkat ederek verdiğim kodu mail.php içerisinden değiştiriyoruz. Her değiştirme işlemi öncesi değiştreceğiniz dosyanın yedeğini almayı unutmayınız. Kodlarda smtp_port ve smtp_timeout kısmını smtp mail ayarlarınıza göre değiştirmelisiniz.

<?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;   SAYIYI SİZDEKİ BİLGİLEE GÖRE DEĞİŞTİRMEYİ UNUTMAYIN
public $smtp_timeout = 5; GENELLİKLE 5’TİR. FAKAT KONTROL EDİNİZ
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);
}
}
}
}

Bu kodu yapıştırıp kaydettikten sonra opencart mail sorunu ve opencart smtp mail sorunu ile ilişkiniz tamamıyle kesilecektir. Herkese bol kazançlar dilerim arkadaşlar. Sorularınızı ve anlamadığnız noktaları yorum kısmından bana iletebilirsiniz. Sorununuzu yaşayan bir siz olmayabilirsiniz. Böylelikle herkese yardımcı olmuş oluruz.

Güncelleme Tarihi:06.06.2018
Güncelleme Nedeni: Opencart 3.0.2.0 Mail Sorunu

Yukarıda anlattıklarıma nazaran 3.0.2.0 versiyon yükleyenlerde yukarıdaki anlattıklarımdan sonuç alamadım. 3.0.2.0 versiyonlarında aynı sorunlar ile karşılaşanlar için aşağıda bağlantısını vermiş olduğum linkteki zip dosyasını hostinginizdeki system/library klasörü içerisine atıp değiştirme uyarısına tamam demeniz gerekmektedir.

 

Opencart 3.0.2.0 mail sorunu için indirmeniz gereken dosya İNDİR

Not: Her ihtimale karşı yedek almayı unutmayınız….

Umarım opencart mail sorunu ve opencart smtp mail ayarları konusunda yardımcı olabilmişimdir.

 

2 Comments

Yorum Yap