1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Using PHP to send SMTP email using Zend

Discussion in 'General PHP and MySQL Discussions' started by AndyB, Feb 5, 2014.

  1. AndyB

    AndyB Well-Known Member

    I would like to create a PHP script to send an email using SMTP.

    The PHP script below is not working. Do I have to do anthing special to use Zend commands?

    PHP:
    <?php

    $config 
    = array(
    'ssl' => 'tls',
    'port' => 587,
    'auth' => 'login',
    'username' => 'example@gmail.com',
    'password' => 'mypassword'
    );

    $smtpConnection = new Zend_Mail_Transport_Smtp('smtp.gmail.com'$config);

    $mail = new Zend_Mail();

    $mail->setBodyText('This is the text of the mail.');
    $mail->setFrom('example@example.com''Some Sender');
    $mail->addTo('example@example.com''Some Recipient');
    $mail->setSubject('TestSubject');
    $mail->send($smtpConnection);

    ?>
    When I execute this script, I get the following error message in my Centos server log:

    Code:
    [Tue Feb 04 19:27:02 2014] [error] [client 25.5.96.60] PHP Warning: require_once(Zend/Mime.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory in /path/to/www/forums/library/Zend/Mail/Transport/Smtp.php on line 27
    [Tue Feb 04 19:27:02 2014] [error] [client 25.5.96.60] PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'Zend/Mime.php' (include_path='.:/usr/share/pear:/usr/share/php') in /path/to/www/forums/library/Zend/Mail/Transport/Smtp.php on line 27
    
    
     
    Last edited: Feb 5, 2014
  2. Null

    Null Well-Known Member

    I'm not sure as I don't use the Zend framework (well, I messed with it about 2 years ago).

    PHP:
    set_include_path('path/to/library/'.get_include_path());

    require_once(
    'Zend/Loader/Autoloader.php');

    $autoloader Zend_Loader_Autoloader::getInstance();

    $config = array('ssl' => 'tls''port' => 25'auth' => 'login''username' => 'example@gmail.com''password' => 'password');

    $transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com'$config);

    $mail = new Zend_Mail();

    $mail->setBodyText('This is the text of the mail.');
    $mail->setFrom('sender@test.com''Sender Name');
    $mail->addTo('recipient@test.com''Recipient Name');
    $mail->setSubject('TestSubject');
    $mail->send($transport);
    It's late here (4:02am), I'll check in on the thread in the morning.
     
    Last edited: Feb 5, 2014
    AndyB likes this.
  3. AndyB

    AndyB Well-Known Member

    Okay I got it.

    It appears that running the PHP code from a stand alone script is not the best way to test this.

    I put the PHP code from post #1 into an add-on and it works great.
     
    Last edited: Feb 5, 2014
  4. AndyB

    AndyB Well-Known Member

    Thank you, Null. I really appreciate your time with this.

    I will use the code in an add-on so I can use the code in post #1. I often like to test things in a stand alone script first to make sure they work.
     
    Null likes this.
  5. Jeremy

    Jeremy XenForo Moderator Staff Member

    Why are you using the above code in XenForo? You should utilize the tools available to you in the software.
     
  6. AndyB

    AndyB Well-Known Member

    When I first started researching this, I didn't know what XF tools were available. Thankfully I got some help and I'm now using the proper XenForo code.

    Here's what I ended up using in my add-on.

    PHP:
    // get visitor data
    $visitor XenForo_Visitor::getInstance();

    // username
    $username $visitor['username'];

    // email 
    $email $visitor['email'];

    // emailSubject
    $emailSubject = new XenForo_Phrase('newthreademail_subject');

    // emailMessage
    $emailMessage = new XenForo_Phrase('newthreademail_message');

    // define user variable
    $user = array(
        
    'username' => $username,
        
    'email' => $email
    );

    // prepare mailParams                    
    $mailParams = array(
        
    'user' => $user,
        
    'subject' => $emailSubject,
        
    'message' => $emailMessage
    );
        
    // prepare mail variable
    $mail XenForo_Mail::create('contact'$mailParams);

    // send mail
    $mail->send($user['email'], $user['username']);
     
    TBDragon likes this.
  7. TBDragon

    TBDragon Active Member

    can i use this in my forum as i work on something slimier to this .

    good luck in ur addon ^_^
     
  8. Chris D

    Chris D XenForo Developer Staff Member

    Of course you can. If you look through XenForo files it's pretty much how XenForo does it.
     
  9. TBDragon

    TBDragon Active Member

    i didnt know where to search and i was busy thats y i make it from scratch some how using the Mailer script and SMTP and so many things >_< will make my life hard but with this way i can do it more easier .
     

Share This Page