betax
OpenCart-TR
- Katılım
- 25 Ara 2009
- Mesajlar
- 21
- Tepkime puanı
- 0
- Puanları
- 0
Arkadaşlar,
Forumda uzun zamandır takip ediyorum hatta bende bir ara resmen vazgeçmek üzereydim. Mail boş gidiyor, logo görünmüyor, müşterilere mail gitmiyor, outlook, thunderbird gibi e-mail uygulamalarında resimler çıkmıyor vs gibi sorun ve istekleri umarım çözebilmişimdir. Sistem şu an oldukça hızlı ve iyi çalışıyor.
Not : OC 1.4.9.4 version için geçerlidir.
1 - Öncelikle SMTP ayarlarını doğru yapmamız gerekiyor ;
Ayarlar bölümünden 'Mail' sekmesine geliyoruz.
Mail Protocol : SMTP
SMTP Host : mail.benimsitem.com
SMTP Kullanıcı Adı : mail@benimsitem.com ( kullanıcılara ileti göndermek amacı ile kullanacağınız mail adresiniz )
SMTP Şifre : xxxxxx ( kullanıcı adı olarak girdiğiniz mail adresinizin şifresini yazmalısınız.)
SMTP Port : 587 ( Sunucunuz farklı bir port kullanıyorsa sistem yöneticinize danışmalısınız. )
SMTP Timeout : 5
Ayarları kaydedip çıkıyoruz.
2 - Şimdi 'Mail.php' dosyamızı düzenleyeceğiz.
Mail.php dosyamızı Notepad++ ile açalım ( system/library/mail.php )
16. Satır :
olmalı.
17. Satır :
olmalı.
105. Satır :
olmalı.
106. Satır : 105. satırın altına ekliyoruz.
108-131. Satır :
108 ile 130. satı arasını bu şekilde düzenleyip düzenleyip sunucumuza gönderiyoruz.
Mail.php dosyamızın bir örneği : ( Herhangi bir problem olabilir diye ekliyorum. )
3 - Şimdi 'Contact.php' sayfamızı düzenleyeceğiz. :
Contact.php dosyasımızı Notepad + + ile açalım ( admin/controller/sale/contact.php )
22-23-24. Satır :
91. Satır :
Siliyoruz.
110. Satır :
olarak düzenleyip sunucumuza gönderiyoruz.
Contac.php dosyamızın bir örneği :
Admin mail bölümünden bütün müşterilere bir mail gönderelim, eklediğiniz resim dosyalarında türkçe karakter olmamalı ve mutlaka 'Alternatif Yazı' eklemeniz gerekmektedir.
Artık sistemimiz Hotmail, Gmail, Yahoo, AOL, Outlook, Outlook Express, Mozilla Thunderbird, mail.benimsitem.com/mail gibi bütün tarayıcı ve e-mail programlarında spam'a düşmeden gidecek, eklediğiniz resim ve içerik karşı tarafta görünecektir.
Herkese teşekkür ederim.
Betax
Forumda uzun zamandır takip ediyorum hatta bende bir ara resmen vazgeçmek üzereydim. Mail boş gidiyor, logo görünmüyor, müşterilere mail gitmiyor, outlook, thunderbird gibi e-mail uygulamalarında resimler çıkmıyor vs gibi sorun ve istekleri umarım çözebilmişimdir. Sistem şu an oldukça hızlı ve iyi çalışıyor.
Not : OC 1.4.9.4 version için geçerlidir.
1 - Öncelikle SMTP ayarlarını doğru yapmamız gerekiyor ;
Ayarlar bölümünden 'Mail' sekmesine geliyoruz.
Mail Protocol : SMTP
SMTP Host : mail.benimsitem.com
SMTP Kullanıcı Adı : mail@benimsitem.com ( kullanıcılara ileti göndermek amacı ile kullanacağınız mail adresiniz )
SMTP Şifre : xxxxxx ( kullanıcı adı olarak girdiğiniz mail adresinizin şifresini yazmalısınız.)
SMTP Port : 587 ( Sunucunuz farklı bir port kullanıyorsa sistem yöneticinize danışmalısınız. )
SMTP Timeout : 5
Ayarları kaydedip çıkıyoruz.
2 - Şimdi 'Mail.php' dosyamızı düzenleyeceğiz.
Mail.php dosyamızı Notepad++ ile açalım ( system/library/mail.php )
16. Satır :
Kod:
public $newline = "\n";
17. Satır :
Kod:
public $crlf = "\r\n";
105. Satır :
Kod:
$header .= 'Content-Transfer-Encoding: 8bit' . $this->newline;
106. Satır : 105. satırın altına ekliyoruz.
Kod:
$header .= $this->newline;
108-131. Satır :
Kod:
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;
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;
}
Mail.php dosyamızın bir örneği : ( Herhangi bir problem olabilir diye ekliyorum. )
Kod:
<?php
final class Mail {
protected $to;
protected $from;
protected $sender;
protected $subject;
protected $text;
protected $html;
protected $attachments = array();
public $protocol = 'mail';
public $hostname;
public $username;
public $password;
public $port = 25;
public $timeout = 5;
public $newline = "\n";
public $crlf = "\r\n";
public $verp = FALSE;
public $parameter = '';
public function setTo($to) {
$this->to = $to;
}
public function setFrom($from) {
$this->from = $from;
}
public function addheader($header, $value) {
$this->headers[$header] = $value;
}
public function setSender($sender) {
$this->sender = html_entity_decode($sender);
}
public function setSubject($subject) {
$this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
}
public function setText($text) {
$this->text = $text;
}
public function setHtml($html) {
$this->html = $html;
}
public function addAttachment($file, $filename = '') {
if (!$filename) {
$filename = basename($file);
}
$this->attachments[] = array(
'filename' => $filename,
'file' => $file
);
}
public function send() {
if (!$this->to) {
exit('Error: E-Mail to required!');
}
if (!$this->from) {
exit('Error: E-Mail from required!');
}
if (!$this->sender) {
exit('Error: E-Mail sender required!');
}
if (!$this->subject) {
exit('Error: E-Mail subject required!');
}
if ((!$this->text) && (!$this->html)) {
exit('Error: E-Mail message required!');
}
if (is_array($this->to)) {
$to = implode(',', $this->to);
} else {
$to = $this->to;
}
$boundary = '----=_NextPart_' . md5(time());
$header = '';
if ($this->protocol != 'mail') {
$header .= 'To: ' . $to . $this->newline;
$header .= 'Subject: ' . $this->subject . $this->newline;
}
$header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline;
//$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline;
//$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline;
$header .= 'From: ' . '=?UTF-8?B?'.base64_encode($this->sender).'?=' . '<' . $this->from . '>' . $this->newline;
$header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline;
$header .= 'Return-Path: ' . $this->from . $this->newline;
$header .= 'X-Mailer: PHP/' . phpversion() . $this->newline;
$header .= 'MIME-Version: 1.0' . $this->newline;
$header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline;
$header .= 'Content-Transfer-Encoding: 8bit' . $this->newline;
$header .= $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 .= '' . $this->newline;
$message .= '' . $this->newline;
if ($this->text) {
$message .= $this->text . $this->newline;
} else {
$message .= '' . $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['file'])) {
$handle = fopen($attachment['file'], 'r');
$content = fread($handle, filesize($attachment['file']));
fclose($handle);
$message .= '--' . $boundary . $this->newline;
$message .= 'Content-Type: application/octetstream' . $this->newline;
$message .= 'Content-Transfer-Encoding: base64' . $this->newline;
$message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline;
$message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $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') {
$handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout);
if (!$handle) {
error_log('Error: ' . $errstr . ' (' . $errno . ')');
} else {
if (substr(PHP_OS, 0, 3) != 'WIN') {
socket_set_timeout($handle, $this->timeout, 0);
}
while ($line = fgets($handle, 515)) {
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($this->hostname, 0, 3) == 'tls') {
fputs($handle, 'STARTTLS' . $this->crlf);
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 220) {
error_log('Error: STARTTLS not accepted from server!');
}
}
if (!empty($this->username) && !empty($this->password)) {
fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 250) {
error_log('Error: EHLO not accepted from server!');
}
fputs($handle, 'AUTH LOGIN' . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 334) {
error_log('Error: AUTH LOGIN not accepted from server!');
}
fputs($handle, base64_encode($this->username) . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 334) {
error_log('Error: Username not accepted from server!');
}
fputs($handle, base64_encode($this->password) . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 235) {
error_log('Error: Password not accepted from server!');
}
} else {
fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 250) {
error_log('Error: HELO not accepted from server!');
}
}
if ($this->verp) {
fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . $this->crlf);
} else {
fputs($handle, 'MAIL FROM: <' . $this->from . '>' . $this->crlf);
}
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 250) {
error_log('Error: MAIL FROM not accepted from server!');
}
if (!is_array($this->to)) {
fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf);
$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)) {
error_log('Error: RCPT TO not accepted from server!');
}
} else {
foreach ($this->to as $recipient) {
fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf);
$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)) {
error_log('Error: RCPT TO not accepted from server!');
}
}
}
fputs($handle, 'DATA' . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 354) {
error_log('Error: DATA not accepted from server!');
}
fputs($handle, $header . $message . $this->crlf);
fputs($handle, '.' . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 250) {
error_log('Error: DATA not accepted from server!');
}
fputs($handle, 'QUIT' . $this->crlf);
$reply = '';
while ($line = fgets($handle, 515)) {
$reply .= $line;
if (substr($line, 3, 1) == ' ') {
break;
}
}
if (substr($reply, 0, 3) != 221) {
error_log('Error: QUIT not accepted from server!');
}
fclose($handle);
}
}
}
}
?>
3 - Şimdi 'Contact.php' sayfamızı düzenleyeceğiz. :
Contact.php dosyasımızı Notepad + + ile açalım ( admin/controller/sale/contact.php )
22-23-24. Satır :
Kod:
$mail->setSubject(sprintf($this->language->get('email_subject'), $this->request->post['name']));
$mail->setText(strip_tags('Email from: ' . $this->request->post['email'] . "\r\n" .html_entity_decode($this->request->post['enquiry'], ENT_QUOTES, 'UTF-8')));
$mail->send();
91. Satır :
Kod:
$message = str_replace($value, 'cid:' . basename($filename), $message);
110. Satır :
Kod:
$mail->addAttachment($attachment['filename'], $attachment['filename']);
Contac.php dosyamızın bir örneği :
Kod:
<?php
class ControllerInformationContact extends Controller {
private $error = array();
public function index() {
$this->language->load('information/contact');
$this->document->title = $this->language->get('heading_title');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->hostname = $this->config->get('config_smtp_host');
$mail->username = $this->config->get('config_smtp_username');
$mail->password = $this->config->get('config_smtp_password');
$mail->port = $this->config->get('config_smtp_port');
$mail->timeout = $this->config->get('config_smtp_timeout');
$mail->setTo($this->config->get('config_email'));
$mail->setFrom($this->config->get('config_email'));
$mail->setSender($this->request->post['name']);
$mail->setSubject(sprintf($this->language->get('email_subject'), $this->request->post['name']));
$mail->setText(strip_tags('Email from: ' . $this->request->post['email'] . "\r\n" .html_entity_decode($this->request->post['enquiry'], ENT_QUOTES, 'UTF-8')));
$mail->send();
$this->redirect(HTTPS_SERVER . 'index.php?route=information/contact/success');
}
$this->document->breadcrumbs = array();
$this->document->breadcrumbs[] = array(
'href' => HTTP_SERVER . 'index.php?route=common/home',
'text' => $this->language->get('text_home'),
'separator' => FALSE
);
$this->document->breadcrumbs[] = array(
'href' => HTTP_SERVER . 'index.php?route=information/contact',
'text' => $this->language->get('heading_title'),
'separator' => $this->language->get('text_separator')
);
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_address'] = $this->language->get('text_address');
$this->data['text_telephone'] = $this->language->get('text_telephone');
$this->data['text_fax'] = $this->language->get('text_fax');
$this->data['entry_name'] = $this->language->get('entry_name');
$this->data['entry_email'] = $this->language->get('entry_email');
$this->data['entry_enquiry'] = $this->language->get('entry_enquiry');
$this->data['entry_captcha'] = $this->language->get('entry_captcha');
if (isset($this->error['name'])) {
$this->data['error_name'] = $this->error['name'];
} else {
$this->data['error_name'] = '';
}
if (isset($this->error['email'])) {
$this->data['error_email'] = $this->error['email'];
} else {
$this->data['error_email'] = '';
}
if (isset($this->error['enquiry'])) {
$this->data['error_enquiry'] = $this->error['enquiry'];
} else {
$this->data['error_enquiry'] = '';
}
if (isset($this->error['captcha'])) {
$this->data['error_captcha'] = $this->error['captcha'];
} else {
$this->data['error_captcha'] = '';
}
$this->data['button_continue'] = $this->language->get('button_continue');
$this->data['action'] = HTTP_SERVER . 'index.php?route=information/contact';
$this->data['store'] = $this->config->get('config_name');
$this->data['address'] = nl2br($this->config->get('config_address'));
$this->data['telephone'] = $this->config->get('config_telephone');
$this->data['fax'] = $this->config->get('config_fax');
if (isset($this->request->post['name'])) {
$this->data['name'] = $this->request->post['name'];
} else {
$this->data['name'] = '';
}
if (isset($this->request->post['email'])) {
$this->data['email'] = $this->request->post['email'];
} else {
$this->data['email'] = '';
}
if (isset($this->request->post['enquiry'])) {
$this->data['enquiry'] = $this->request->post['enquiry'];
} else {
$this->data['enquiry'] = '';
}
if (isset($this->request->post['captcha'])) {
$this->data['captcha'] = $this->request->post['captcha'];
} else {
$this->data['captcha'] = '';
}
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/information/contact.tpl')) {
$this->template = $this->config->get('config_template') . '/template/information/contact.tpl';
} else {
$this->template = 'default/template/information/contact.tpl';
}
$this->children = array(
'common/column_right',
'common/footer',
'common/column_left',
'common/header'
);
$this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));
}
public function success() {
$this->language->load('information/contact');
$this->document->title = $this->language->get('heading_title');
$this->document->breadcrumbs = array();
$this->document->breadcrumbs[] = array(
'href' => HTTP_SERVER . 'index.php?route=common/home',
'text' => $this->language->get('text_home'),
'separator' => FALSE
);
$this->document->breadcrumbs[] = array(
'href' => HTTP_SERVER . 'index.php?route=information/contact',
'text' => $this->language->get('heading_title'),
'separator' => $this->language->get('text_separator')
);
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_message'] = $this->language->get('text_message');
$this->data['button_continue'] = $this->language->get('button_continue');
$this->data['continue'] = HTTP_SERVER . 'index.php?route=common/home';
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/success.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/success.tpl';
} else {
$this->template = 'default/template/common/success.tpl';
}
$this->children = array(
'common/column_right',
'common/footer',
'common/column_left',
'common/header'
);
$this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));
}
public function captcha() {
$this->load->library('captcha');
$captcha = new Captcha();
$this->session->data['captcha'] = $captcha->getCode();
$captcha->showImage();
}
private function validate() {
if ((strlen(utf8_decode($this->request->post['name'])) < 3) || (strlen(utf8_decode($this->request->post['name'])) > 32)) {
$this->error['name'] = $this->language->get('error_name');
}
if (!preg_match(EMAIL_PATTERN, $this->request->post['email'])) {
$this->error['email'] = $this->language->get('error_email');
}
if ((strlen(utf8_decode($this->request->post['enquiry'])) < 10) || (strlen(utf8_decode($this->request->post['enquiry'])) > 3000)) {
$this->error['enquiry'] = $this->language->get('error_enquiry');
}
if (!isset($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {
$this->error['captcha'] = $this->language->get('error_captcha');
}
if (!$this->error) {
return TRUE;
} else {
return FALSE;
}
}
}
?>
Admin mail bölümünden bütün müşterilere bir mail gönderelim, eklediğiniz resim dosyalarında türkçe karakter olmamalı ve mutlaka 'Alternatif Yazı' eklemeniz gerekmektedir.
Artık sistemimiz Hotmail, Gmail, Yahoo, AOL, Outlook, Outlook Express, Mozilla Thunderbird, mail.benimsitem.com/mail gibi bütün tarayıcı ve e-mail programlarında spam'a düşmeden gidecek, eklediğiniz resim ve içerik karşı tarafta görünecektir.
Herkese teşekkür ederim.
Betax