How to send an HTML email using SMTP in PHP

后端 未结 6 1614
醉梦人生
醉梦人生 2021-01-14 19:56

I\'ve been able to send an email using SMTP in PHP, but when I try to change the Content Type to HTML, the email doesn\'t get delivered. This is the code I\'m trying to use:

相关标签:
6条回答
  • 2021-01-14 20:36

    I did some research, then I made my own code to send mail with HTML formatting using SMTP authentication. See here:

    <?php 
    require_once "Mail.php";
    $url = $_GET['baseUrl']; // source url
    $success = false;
    $senderName = isset( $_GET['txtname'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_GET['txtname'] ) : "";
    $senderEmail = isset( $_GET['txtemail'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_GET['txtemail'] ) : "";
    $msg = isset( $_GET['txtDesc'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_GET['txtDesc'] ) : "";
    $body = '<table width="400" border="0">
      <tr>
        <th scope="col">Name:</th>
        <th scope="col">'.$senderName.'</th>
      </tr>
      <tr>
        <th scope="col">Company:</th>
        <td scope="col">'.$_GET['txtCompany'].'</td>
      </tr>
      <tr>
        <th scope="row">Phone:</th>
        <td>'.$_GET['txtphone'].'</td>
      </tr>
      <tr>
        <th scope="row">E-mail:</th>
        <td>'.$senderEmail.'</td>
      </tr>
      <tr>
        <th scope="row">URL:</th>
        <td>'.$url.'</td>
      </tr>
      <tr>
        <th scope="row">Massage:</th>
        <td>'.$msg.'</td>
      </tr>
    </table>';
    
     $from = $senderName."<".$senderEmail.">";
     $to = "Contact ManagerHR<info@aequitas-infotech.com>";
     $subject = "Hi!";
     $host = "XXX.host.com";
     $username = "username@host.com";
     $password = "*****";
     /* MIME-Version should be "1.0rn" and Content-Type should be "text/html; charset=ISO-8859-1rn" to send an HTML Email */
    $headers = array ('MIME-Version' => '1.0rn',
            'Content-Type' => "text/html; charset=ISO-8859-1rn",
            'From' => $from,
            'To' => $to,
            'Subject' => $subject
         );
    $smtp = Mail::factory('smtp',
       array ('host' => $host,
         'auth' => true,
         'username' => $username,
         'password' => $password));
    $mail = $smtp->send($to, $headers, $body);
     if (PEAR::isError($mail)) {
       echo("<p>" . $mail->getMessage() . "</p>");
      } else {
          header('Location: '.$url); // redirect to url where from inquiry made
       //echo("<p>Message successfully sent!</p>");
      }
     ?>
    
    0 讨论(0)
  • 2021-01-14 20:37

    Send your HTML email using SMTP in PHP to 2 or 3 different emails WORKING 100%

    <?php
    
    require_once "Mail.php";
    
    $host = "ssl://smtp.gmail.com";
    $username = "example@gmail.com";
    $password = "password";
    $port = "465";
    
    $to  = '1-to-example@example.com' . ', '; 
    $to  = '2-to-example@example.com' . ', '; 
    $to  = '3-to-example@example.com' . ', '; 
    
    $email_from = "from-example@example.com";
    $email_subject = "Your Subject";
    
    $email_body = "**<html> <body>**"; 
    $email_body .= "<strong> Your HTML code </strong>";
    $email_body .= "**</body></html>**";
    
    
    $headers = array ('From' => $email_from, 'To' => $to, 'Subject' => 
    $email_subject, 'Reply-To' => $email_address , 'MIME-Version' => '1.0', 'Content-Type' => "text/html; charset=ISO-8859-1");
    
    $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
    
    $mail = $smtp->send($to, $headers, $email_body);
    
    ?>
    
    0 讨论(0)
  • 2021-01-14 20:38

    You should create the mail body via mime object. And pear will handle it from there. Ex:

         $crlf = "\n";
        // Creating the Mime message
        $mime = new Mail_mime($crlf);
    
        // Setting the body of the email
        $mime->setTXTBody($text);
        $mime->setHTMLBody($html);
       ...
        $body = $mime->get();
    
    0 讨论(0)
  • 2021-01-14 20:55

    The problem most likely lies in the Mail class, but since we don't know what Mail class you're using, it's difficult to answer. If you're not already doing so, I'd really think about using PHPMailer: https://github.com/PHPMailer/PHPMailer

    0 讨论(0)
  • 2021-01-14 21:03

    Write content type in a first line of header just like this

    $to = "<example@example.com>"; $headers = array ('Content-Type' => "text/html; charset=ISO-8859-1", 'From' => $from, 'To' => $to, 'Subject' => $subject, 'MIME-Version' => '1.0' ); 
    

    This is working for me..

    0 讨论(0)
  • 2021-01-14 21:03

    You can complete in two steps.

    Step 1: Put code in your file:

    <?php
    require 'PHPMailerAutoload.php';
    
    $mail = new PHPMailer;
    
    //$mail->SMTPDebug = 3;                               // Enable verbose debug output
    
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'user@example.com';                 // SMTP username
    $mail->Password = 'secret';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
    
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     // Add a recipient
    $mail->addAddress('ellen@example.com');               // Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');
    
    $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
    $mail->isHTML(true);                                  // Set email format to HTML
    
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
    if(!$mail->send()) {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }
    

    Step:2 Download this included file in given URL.
    Url: https://github.com/PHPMailer/PHPMailer.git

    and click on clone or download button and set folder your system.

    0 讨论(0)
提交回复
热议问题