PHP kullanarak e-posta nasıl gönderilir?


Yanıtlar:


442

PHP'nin mail()işlevini kullanarak mümkündür. Yerel bir sunucuda posta işlevinin çalışmadığını unutmayın.

<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?> 

Referans:


6
yerel sunucudan bir e-posta göndermek gerekirse. en yakın posta sunucusuna erişmek ve benim için posta göndermek yapmak için herhangi bir yolu var demek. yani bir yahoo posta sunucusunun adresini bulabilirsiniz ve daha sonra postalama amacıyla bu sunucuyu kullanın ... Bu mümkün mü?
user590849

19
Yerel sunucunuzda SMTP yapılandırmanız gerekir. Bu benzer
gönderiye

Merhaba @MuthuKumaran spam giderse çözmek için iyi bir çözüm varsa, lütfen cevap verin.
Muhammed Ashikuzzaman

@MuhammadAshikuzzaman PHP'deki spam sorununu çözemezsiniz. Hala ilgili olup olmadığını lütfen uygun StackExchange sitesinde yeni bir soru sorun.
Uli Köhler

Bunun yerel sunucumda çalışıp çalışmadığını nasıl doğrularım veya doğrularım? Bunu yapmak için olası yöntemler yoksa, lütfen bazı alternatifler önerin. teşekkür ederim.
abhishah901

120

Ayrıca https://github.com/PHPMailer/PHPMailer adresinde PHPMailer sınıfını da kullanabilirsiniz .

Şeffaf bir şekilde posta işlevini kullanmanıza veya bir smtp sunucusu kullanmanıza izin verir. Ayrıca HTML tabanlı e-postaları ve ekleri yönetir, böylece kendi uygulamanızı yazmak zorunda kalmazsınız.

Sınıf kararlı ve Drupal, SugarCRM, Yii ve Joomla!

Yukarıdaki sayfadan bir örnek:

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.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 encryption, 'ssl' also accepted

$mail->From = 'from@example.com';
$mail->FromName = '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->WordWrap = 50;                                 // Set word wrap to 50 characters
$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';
}

4
Besteci kullanılmıyorsa:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

43

Html biçimli e-postalarla ilgileniyorsanız Content-type: text/html;, başlığı ilettiğinizden emin olun . Misal:

// multiple recipients
$to  = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);

Daha fazla bilgi için php mail fonksiyonunu kontrol edin .


Merhaba, bu koddan sıkıldım, 3 alıcı, bir Hotmail, bir Gmail ve bir web sitesi e-posta ekledim. Hotmail hariç hepsini aldım. Hotmail için neden çalışmadığına dair bir fikrin var mı?
antf

Lütfen bu durumda spam klasörünü kontrol edin.
Sumoanand

Zaten yaptım, spam değil, hiç ulaşmıyor. Konu hakkında biraz daha okudum ve Hotmail'in bazı özel başlıklar gerektirdiği veya e-postaların sunucularını geçmesine izin vermediği anlaşılıyor ... Yine de çözümü bulamadım.
antf

PHPMailer'i kullanarak ve PHPMailer'in e-posta nesnesine SSL ile e-posta hesabı verilerimi girerek sorunumu çözdüm.
antf

İletinin HTML ve php içeriği varsa ne olur?

14

Ayrıca PEAR posta paketi Armut Posta Sayfasına bakın

Yerleşik standart posta () işlevinden biraz daha sağlam gibi görünüyor (standart işlev yeterli değilse).

İşte bu sayfadan nasıl kullanıldığını gösteren bir alıntı. PEAR Mail send () kullanımı

<?php
    include('Mail.php');

    $recipients = 'joe@example.com';

    $headers['From']    = 'richard@example.com';
    $headers['To']      = 'joe@example.com';
    $headers['Subject'] = 'Test message';

    $body = 'Test message';

    $smtpinfo["host"] = "smtp.server.com";
    $smtpinfo["port"] = "25";
    $smtpinfo["auth"] = true;
    $smtpinfo["username"] = "smtp_user";
    $smtpinfo["password"] = "smtp_password";


    // Create the mail object using the Mail::factory method
    $mail_object =& Mail::factory("smtp", $smtpinfo); 

    $mail_object->send($recipients, $headers, $body);
?> 

lütfen kullanılmış mail.php bağlantınızın ve bir klasördeki diğer tüm ilişkili dosyaların indirme bağlantısını verin. Teşekkürler
Muhammad Ashikuzzaman

1
@Ashik Örneğimde Mail.phpatıfta bulunulan dosya Pear Mail paketinin bir parçasıdır. Pear Mail paketini indirip yüklerseniz, dahil edebilirsiniz Mail.php. Yukarıdaki 'Armut Posta Sayfası' bağlantısını tıklatırsanız, talimatları içeren bir İndirme bağlantısı vardır.
Kevin S

12

Çoğu proje için bugünlerde Swift postacı kullanıyorum . Bize popüler Symfony çerçevesini ve Twig şablon motorunu veren aynı kişiler tarafından oluşturulan e-postaları göndermek için çok esnek ve zarif bir nesne odaklı yaklaşımdır .


Temel kullanım:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');

if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
    echo json_encode([
        "status" => "OK",
        "message" => 'Your message has been sent!'
    ], JSON_PRETTY_PRINT);
} else {
    echo json_encode([
        "status" => "error",
        "message" => 'Oops! Something went wrong!'
    ], JSON_PRETTY_PRINT);
}

Swift postasını kullanma hakkında daha fazla bilgi için resmi belgelere bakın .


Selam. Swift_MailTransportBelgelere bağlantınız söylediğinde dediniz Swift_SendmailTransport. Bu, hızlı posta gönderisinin eski sürümüne atıfta bulunduğunuz anlamına mı geliyor yoksa bir yazım hatası mı, yoksa bir şeyleri yanlış anladım mı? Sunucumda php7 olmadığım için swift-mailer'ın eski sürümünü yüklemem gerekiyor. Bu nedenle, geçerli sürümle ilgili belgelerin paketin eski sürümüyle uyumlu olup olmadığını bilmeliyim. Teşekkürler.
Yevgeniy Afanasyev

1
@YevgeniyAfanasyev: Cevabım, 2 yıl önce işleri yapmanın doğru yoluydu, ancak Swift_MailTransport, Swiftmailer v5.4.5'ten bu yana kullanımdan kaldırıldı . Her neyse, projeniz için PHP 7 kullanamıyorsanız, Swiftmailer v5.4.9 ile gitmelisiniz. Bu, PHP 5'i hala destekleyen son kararlı sürümdür. V5.4.9 sürümünün belgeleri veya v5.4.9 ve v6.0.2 arasındaki farklarla ilgili ayrıntılar için Fabien Potencier ile iletişime geçmek veya Github'da bir sorun oluşturmak isteyebilirsiniz .
John Slegers

Çok teşekkür ederim. Dolayısıyla, dağıtımcılar kullanılabilir olduğunda eski sürüm için hiçbir belge yoktur. Bunu bildiğim iyi oldu.
Yevgeniy Afanasyev

7

Bu, posta işlevini kullanarak düz metin e-posta göndermek için çok temel bir yöntemdir.

<?php
$to = 'SomeOtherEmailAddress@Domain.com';
$subject = 'This is subject';
$message = 'This is body of email';
$from = "From: FirstName LastName <SomeEmailAddress@Domain.com>";
mail($to,$subject,$message,$from);

7

Bunu dene:

<?php
$to = "somebody@example.com";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com";

mail($to,$subject,$txt,$headers);
?>

5

Tam kod örneği ..

Bir kez deneyin ..

<?php
// Multiple recipients
$to = 'johny@example.com, sally@example.com'; // note the comma

// Subject
$subject = 'Birthday Reminders for August';

// Message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Johny</td><td>10th</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';

// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';

// Mail it
mail($to, $subject, $message, implode("\r\n", $headers));
?>

5

Gelecekteki okuyucular için: Başka yanıtlar işe yaramazsa bunu deneyin (Bende olduğu gibi):

1.) PHPMailer'ı indirin , zip dosyasını açın ve klasörü proje dizininize çıkarın.

3.) Ayıklanan dizini PHPMailer olarak yeniden adlandırın ve php betiğinizin içine aşağıdaki kodu yazın (betiğin PHPMailer klasörünün dışında olması gerekir )

<?php
// PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception;
// Base files 
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
// create object of PHPMailer class with boolean parameter which sets/unsets exception.
$mail = new PHPMailer(true);                              
try {
    $mail->isSMTP(); // using SMTP protocol                                     
    $mail->Host = 'smtp.gmail.com'; // SMTP host as gmail 
    $mail->SMTPAuth = true;  // enable smtp authentication                             
    $mail->Username = 'sender@gmail.com';  // sender gmail host              
    $mail->Password = 'password'; // sender gmail host password                          
    $mail->SMTPSecure = 'tls';  // for encrypted connection                           
    $mail->Port = 587;   // port for SMTP     

    $mail->setFrom('sender@gmail.com', "Sender"); // sender's email and name
    $mail->addAddress('receiver@gmail.com', "Receiver");  // receiver's email and name

    $mail->Subject = 'Test subject';
    $mail->Body    = 'Test body';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) { // handle error.
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>

5

Yerel PHP işlevi mail()benim için çalışmıyor. İletiyi yayınlar:

503 Bu posta sunucusu, yerel olmayan bir e-posta adresine göndermeye çalışırken kimlik doğrulaması gerektiriyor

Bu yüzden genellikle PHPMailer paketi kullanıyorum

5.2.23 sürümünü indirdim: GitHub .

Sadece 2 dosya seçtim ve kaynak PHP köküme koydum

class.phpmailer.php
class.smtp.php

PHP'de dosyanın eklenmesi gerekir

require_once('class.smtp.php');
require_once('class.phpmailer.php');

Bundan sonra, sadece kod:

require_once('class.smtp.php');
require_once('class.phpmailer.php');
... 
//----------------------------------------------
// Send an e-mail. Returns true if successful 
//
//   $to - destination
//   $nameto - destination name
//   $subject - e-mail subject
//   $message - HTML e-mail body
//   altmess - text alternative for HTML.
//----------------------------------------------
function sendmail($to,$nameto,$subject,$message,$altmess)  {

  $from  = "yourcontact@yourdomain.com";
  $namefrom = "yourname";
  $mail = new PHPMailer();  
  $mail->CharSet = 'UTF-8';
  $mail->isSMTP();   // by SMTP
  $mail->SMTPAuth   = true;   // user and password
  $mail->Host       = "localhost";
  $mail->Port       = 25;
  $mail->Username   = $from;  
  $mail->Password   = "yourpassword";
  $mail->SMTPSecure = "";    // options: 'ssl', 'tls' , ''  
  $mail->setFrom($from,$namefrom);   // From (origin)
  $mail->addCC($from,$namefrom);      // There is also addBCC
  $mail->Subject  = $subject;
  $mail->AltBody  = $altmess;
  $mail->Body = $message;
  $mail->isHTML();   // Set HTML type
//$mail->addAttachment("attachment");  
  $mail->addAddress($to, $nameto);
  return $mail->send();
}

Mucizevi şekilde çalışır


2
Cevabınız için teşekkür ederim. Cevabında @norteo ile aynı öneri var. Lütfen v5.2'nin kullanımdan kaldırıldığını ve güvenlik güncellemelerini almadığını unutmayın. V6 için doğrudan aşağıdakileri talep edebilirsiniz:use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
Wtower

4

PHP'den e-posta göndermenin temel yolu yerleşik mail()işlevini kullanmaktır , ancak entegrasyonu kolaylaştıracak birkaç kullanıma hazır SDK vardır:

  1. swiftmailer
  2. PHPMailer
  3. Pepipost (HTTP üzerinden çalışır, bu nedenle SMTP bağlantı noktası engelleme sorunu önlenebilir)
  4. Posta göndermek

PS: Pepipost ile çalışıyorum.


3
Pepipost ile çalışıyorsunuz ve Pepipost'u 3 numaraya koyuyorsunuz. +1
GeneCode

2
@GeneCode, Eğer bir şey en iyisi, o zaman. Onlarla çalışıp çalışmadığınız önemli değil :) Swiftmailer ve PHPMailer, kesinlikle e-posta göndermek için en iyi açık kaynak araçlarından biridir (bu yüzden onları 1 ve 2'de tuttum). Ancak aynı zamanda Pepipost SDK'mızda ele almaya çalıştığımız bazı sınırlamalar ve engelleyiciler var.
Dibya Sahoo


1

E-postayı bu komut dosyası ile gönderdi

<h2>Test Mail</h2>
<?php

if (!isset($_POST["submit"]))
  {
  ?>
  <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
  From: <input type="text" name="from"><br>
  Subject: <input type="text" name="subject"><br>
  Message: <textarea rows="10" cols="40" name="message"></textarea><br>
  <input type="submit" name="submit" value="Click To send mail">
  </form>
  <?php
  }

else

  {

  if (isset($_POST["from"]))
    {
    $from = $_POST["from"]; // sender
    $subject = $_POST["subject"];
    $message = $_POST["message"];

    $message = wordwrap($message, 70);

    mail("Test@example.com",$subject,$message,"From: $from\n");
    echo "Thank you for sending an email";
    }
  }
?>

E-posta gönder düğmesine bastıktan sonra, e-posta Test@example.com adresine gönderilir.


1
<?php
include "db_conn.php";//connection file
require "PHPMailerAutoload.php";// it will be in PHPMailer
require "class.smtp.php";// it will be in PHPMailer
require "class.phpmailer.php";// it will be in PHPMailer


$response = array();
$params = json_decode(file_get_contents("php://input"));

if(!empty($params->email_id)){

    $email_id = $params->email_id;
    $flag=false;
    echo "something";
    if(!filter_var($email_id, FILTER_VALIDATE_EMAIL))
    {
        $response['ERROR']='EMAIL address format error'; 
        echo json_encode($response,JSON_UNESCAPED_SLASHES);
        return;
    }
    $sql="SELECT * from sales where email_id ='$email_id' ";

    $result = mysqli_query($conn,$sql);
    $count = mysqli_num_rows($result);

    $to = "demo@gmail.com";
    $subject = "DEMO Subject";
    $messageBody ="demo message .";

    if($count ==0){
        $response["valid"] = false;
        $response["message"] = "User is not registered yet";
        echo json_encode($response);
        return;
    }

    else {

        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->SMTPAuth = true; // authentication enabled
        $mail->IsHTML(true); 
        $mail->SMTPSecure = 'ssl';//turn on to send html email
        // $mail->Host = "ssl://smtp.zoho.com";
        $mail->Host = "p3plcpnl0749.prod.phx3.secureserver.net";//you can use gmail 
        $mail->Port = 465;
        $mail->Username = "demousername@example.com";
        $mail->Password = "demopassword";
        $mail->SetFrom("demousername@example.com", "Any demo alert");
        $mail->Subject = $subject;

        $mail->Body = $messageBody;
        $mail->AddAddress($to);
        echo "yes";

        if(!$mail->send()) {
           echo "Mailer Error: " . $mail->ErrorInfo;
       } 
       else {
           echo "Message has been sent successfully";
      }
    }

}
else{
    $response["valid"] = false;
    $response["message"] = "Required field(s) missing";
    echo json_encode($response);
}


?>

Yukarıdaki kod benim için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.