Bir web sitesinde PHP kullanıyorum ve e-posta işlevi eklemek istiyorum.
WAMPSERVER yükledim.
PHP kullanarak nasıl e-posta gönderebilirim?
Bir web sitesinde PHP kullanıyorum ve e-posta işlevi eklemek istiyorum.
WAMPSERVER yükledim.
PHP kullanarak nasıl e-posta gönderebilirim?
Yanıtlar:
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:
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';
}
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
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 .
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);
?>
Mail.php
atı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.
Ç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 .
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 .
Swift_MailTransport
Belgelere 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.
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);
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));
?>
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;
}
?>
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
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once('src/PHPMailer.php'); require_once('src/Exception.php');
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:
PS: Pepipost ile çalışıyorum.
Posta damgası, Sendgrid vb. Gibi bir posta web hizmeti kullanabilirsiniz.
Sendgrid vs Postmark vs Amazon SES ve diğer e-posta / SMTP API sağlayıcıları?
Düzenleme: Şimdi Google Gmail API'sını kullanıyorum . Sıkı filtreler nedeniyle işverenimin kuruluşuna hatırlatma e-postası gönderme konusunda sorun yaşadım. Ancak Gmail, kişilere spam göndermediğiniz sürece çalışır.
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.
<?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.