Send email with a template using php

后端 未结 9 2157
南旧
南旧 2020-12-04 07:45

How can I send an email using php then add a template design in the email? I\'m using this:

$to = \"someone@example.com\";  
$subject = \"Test mail\";  
$mes         


        
相关标签:
9条回答
  • 2020-12-04 08:02

    Lets have a small crack at this :)

    class Emailer
    {
        var $recipients = array();
        var $EmailTemplate;
        var $EmailContents;
    
        public function __construct($to = false)
        {
            if($to !== false)
            {
                if(is_array($to))
                {
                    foreach($to as $_to){ $this->recipients[$_to] = $_to; }
                }else
                {
                    $this->recipients[$to] = $to; //1 Recip
                }
            }
        }
    
        function SetTemplate(EmailTemplate $EmailTemplate)
        {
            $this->EmailTemplate = $EmailTemplate;            
        }
    
        function send() 
        {
            $this->EmailTemplate->compile();
            //your email send code.
        }
    }
    

    Notice the function SetTemplate() ...

    Heres a a small template class

    class EmailTemplate
    {
        var $variables = array();
        var $path_to_file= array();
        function __construct($path_to_file)
        {
             if(!file_exists($path_to_file))
             {
                 trigger_error('Template File not found!',E_USER_ERROR);
                 return;
             }
             $this->path_to_file = $path_to_file;
        }
    
        public function __set($key,$val)
        {
            $this->variables[$key] = $val;
        }
    
    
        public function compile()
        {
            ob_start();
    
            extract($this->variables);
            include $this->path_to_file;
    
    
            $content = ob_get_contents();
            ob_end_clean();
    
            return $content;
        }
    }
    

    Here's a small example, you still need to do the core of the script but this will provide you with a nice layout to get started with.

    $emails = array(
        'bob@bobsite.com',
        'you@yoursite.com'
    );
    
    $Emailer = new Emailer($emails);
     //More code here
    
    $Template = new EmailTemplate('path/to/my/email/template');
        $Template->Firstname = 'Robert';
        $Template->Lastname = 'Pitt';
        $Template->LoginUrl= 'http://stackoverflow.com/questions/3706855/send-email-with-a-template-using-php';
        //...
    
    $Emailer->SetTemplate($Template); //Email runs the compile
    $Emailer->send();
    

    Thats really all there is to it, just have to know how to use objects and its pretty simple from there, ooh and the template would look a little something like this:

    Welcome to my site,
    
    Dear <?php echo $Firstname ?>, You have been registered on our site.
    
    Please visit <a href="<?php echo $LoginUrl ?>">This Link</a> to view your upvotes
    
    Regards.
    
    0 讨论(0)
  • 2020-12-04 08:06
            $message_to_client = file_get_contents("client_email.html");
            //$message_to_client = "bla bla {{ EMAIL }} bla bla";
    
    
            $variables = array(
                'SITE_TITLE' => $SITE_TITLE,
                'SITE_LOGO' => $SITE_LOGO,
                'SITE_URL' => $SITE_URL,
                'CLIENT_NAME' => strip_tags($data->clientname),
                'PHONE' => strip_tags($data->phone),
                'EMAIL' => strip_tags($data->email),
                'CITY' => strip_tags($data->city),
                'REGION' => strip_tags($data->region),
                'COMMENT' => htmlentities($data->comment)                
            );
    
            $message_to_client = preg_replace_callback('/{{([a-zA-Z0-9\_\-]*?)}}/i',
                 function($match) use ($variables) { 
                     return  $variables[$match[1]]; 
            }, $message_to_client );
    
    0 讨论(0)
  • 2020-12-04 08:15

    First, you have to make a HTML template:

    <form action="#" id="ContactForm" method="post" enctype="multipart/form-data">
        <table border="0" cellspacing="5" cellpadding="5" style="background-color:#CCCCCC; text-align:center;">
            <tr>
                 <td width="15%">Name:</td>
                 <td width="85%"><input name="name" type="text" required></td>
             </tr>
             <tr>
                 <td>Email:</td>
                 <td><input name="email" type="email" required></td>
             </tr>
    
             <tr>
                 <td colspan="2"><input name="sub" type="submit" value="Submit"></td>
             </tr>
    
         </table>                      
    </form>
    

    Below code is the mailing code that uses the template.

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name=$_REQUEST['name'];
        $email=$_REQUEST['email'];
        $to=$email; //change to ur mail address
        $subject="UandBlog - Send Email Template Demo";
        $message =  file_get_contents('Your template path'); // Your Template        
        $headers = 'MIME-Version: 1.0'."\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
        $headers .= "From: noreply@uandblog.com"; 
    
        mail($to, $subject, $message, $headers); 
    }
    

    You can also download the full code with the template from UandAblog.

    0 讨论(0)
  • 2020-12-04 08:18

    Create your template file, e.g,

    /path/to/templates/template.twig:

    Dear {{name}},

    Thank you for writing to us about {{subject}}.

    Then follow the instructions at https://twig.symfony.com/doc/2.x/api.html to install and use the twig templating engine with Composer

    require_once '/path/to/vendor/autoload.php';
    
    $loader = new Twig_Loader_Filesystem('/path/to/templates');
    $twig = new Twig_Environment($loader, array());
    

    Then render and send your email:

    $to = "someone@example.com";  
    $subject = "Test mail";  
    $message = $twig->render('template.twig', array(
       'name' => 'Fred',
       'subject' => 'philately',
    ));
    $from = "someonelse@example.com";  
    $headers = "From: $from";  
    mail($to,$subject,$message,$headers);  
    
    0 讨论(0)
  • 2020-12-04 08:20

    You can use $this in the template as you are in the calling file.

    You only need to include the template after the ob_start command and retrieve its content:

    $this->customer = 1234;    //* This variable is used in the template
    ob_start();
    include 'template.php';
    $template = ob_get_clean();
    var_dump($template);      //* Outputs '<b>1234</b>'
    
    // template.php
    <b><? echo $this->customer ?></b>
    
    0 讨论(0)
  • 2020-12-04 08:20

    If you are using phpmailer then try this on

    // Content
    $mail->isHTML(true); 
    $mail->Subject = 'Newsletter Mail';
    $mail->Body = file_get_contents('mail.html');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    }
    

    And if you are using php mail then just need to add

    $body= file_get_contents('mail.html');
    $headers = 'MIME-Version: 1.0'."\r\n";
    $header.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\n";
    $header .="From:<no-reply@youremail.com>\r\n";
    

    And if you are using CI(Codeigniter) then in my case I'm created mail helper of ci but rest work same

    $message = $this->load->view('front/invoice_email',$data, TRUE); //"Hi, 9999999999 \r\n".";
    if(!empty($adminEmail)) {
      send_user_mail($adminEmail, $message, $subject);
    }
    
    0 讨论(0)
提交回复
热议问题