• 5

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191


File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

Opencart send email in custom Script

I have a script in my opencart, made by myself, and want to make it send an email, but I think that when I try to get email parameters they return null.

Here is my code:

    $email_to = "somewhere@example.com";
    $config = new Config();
    $mail = new Mail();

    $mail->protocol = $config->get('config_mail_protocol');
    $mail->parameter = $config->get('config_mail_parameter');
    $mail->hostname = $config->get('config_smtp_host');
    $mail->username = $config->get('config_smtp_username');
    $mail->password = $config->get('config_smtp_password');
    $mail->port = $config->get('config_smtp_port');
    $mail->timeout = $config->get('config_smtp_timeout');            
    $mail->setSubject("test send mail");
    $mail->setText("test message body text");

When I try calling: echo $config->get('config_mail_protocol'); it returns null.

Do not create new instances of Config but just simply call

$email_to = "somewhere@example.com";
$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->setSubject("test send mail");
$mail->setText("test message body text");

  • 8
Reply Report
      • 2
    • @nunong21 $mail is created as a new instance of Mail class, so yes. And while Your class extends Controller it also is able to access the Config via $this->config property. If it does not extend Controller, then You would have to pass a $registry to it's constructor and implement the same magic __get() and __set() methods as Controller class does.

I've faced problems sending mail with the previously mentioned codes. Opencart mail variables have been changed since opencart 2.

This is the code for opencart 2.3

$mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
$mail->smtp_username = $this->config->get('config_mail_smtp_username');
$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
$mail->smtp_port = $this->config->get('config_mail_smtp_port');
$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');

$mail->setSender(html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8'));
$mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
$mail->setHtml($this->load->view('mail/order', $data));

Code block copied straight from catalog/model/checkout/order.php

I hope somebody will find this useful.

  • 8
Reply Report

Warm tip !!!

This article is reproduced from Stack Exchange / Stack Overflow, please click

Trending Tags

Related Questions