Selamlar,
Bir sistemim var.
Bu sistemde X bir sayfadan AJAX ve JSON ile verimi post ettiriyorum.
Post ettirdiğim sayfada ise ilk önce veritabanına kayıt yapıyorum ve daha sonra veritabanına kaydettiğim veriyi PHPmailer ile mail göndertiyorum.
PHP error.log dosyamdaki hata kaydı;
[Thu Jan 12 18:31:00.702972 2023] [php:warn] [pid 716161] [client 100.100.100.15:50834] PHP Warning: Undefined variable $mail in /var/www/duyuru/islemler/duyuru_ekle_islem.php on line 60, referer: https://cloud.*****.com.tr/duyuru/islemler/duyuru_duzenle.php
[Thu Jan 12 18:31:00.703513 2023] [php:error] [pid 716161] [client 100.100.100.15:50834] PHP Fatal error: Uncaught Error: Call to a member function send() on null in /var/www/duyuru/islemler/duyuru_ekle_islem.php:60\nStack trace:\n#0 {main}\n thrown in /var/www/duyuru/islemler/duyuru_ekle_islem.php on line 60, referer: https://cloud.*****.com.tr/duyuru/islemler/duyuru_duzenle.phpPost ettirdiğim kod;
<script>
// Form submit olayına bir dinleyici ekleyin
document.getElementById('post-form').addEventListener('submit', addAnnouncement);
function addAnnouncement(e) {
CKEDITOR.instances['body'].updateElement();
// Form verilerini alın
var title = document.getElementById('title').value;
var body = editor.getData();
var category_id = document.getElementById('category_id').value;
// Eğer title veya body boş ise, bir uyarı mesajı gösterin
if (title == "" || body == "") {
alert("Başlık ve içerik alanları boş bırakılamaz!");
return;
}
$.ajax({
url: "duyuru_ekle_islem.php",
type: "POST",
dataType: "JSON",
data: {title: title, body: body, category_id: category_id},
success: function(json){
toastr.success(json.post.msg);
}
});
e.preventDefault();
}
</script>Bu ise işlem yaptırdığım sayfanın kodları;
<?php
require_once('config.php');
// Initialize the session
session_start();
//print_r($_SESSION);
//yetki kontrolü yap
if($_SESSION['duyuru_yetki'] != "1"){
header('Location: ../login.php');
session_destroy();
}
//bugünki tarih
$currentDate = date('Y-m-d');
// Check if the user is logged in, otherwise redirect to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: ../login.php");
exit;
}
$user_id = $_SESSION['id'];
ini_set('display_errors', 1); // Hata mesajlarını görüntülemeyi aktif hale getirin
error_reporting(E_ALL); // Tüm hata seviyelerini görüntüle
/* İçerik ID'sini çekiyoruz */
$sql = "SELECT id FROM announcements ORDER BY id DESC LIMIT 1";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$last_id = $row['id'];
// Formdan gönderilen verileri alın
/*$title = mysqli_real_escape_string($conn, $_POST['title']);
$body = mysqli_real_escape_string($conn, $_POST['body']);
$category_id = mysqli_real_escape_string($conn, $_POST['category_id']);
*/
$title = trim($_POST['title']);
$body = trim($_POST['body']);
$body_mailuzunluk = trim($_POST['body']);
$category_id = trim($_POST['category_id']);
$created_user = $user_id; // Kullanıcının id'sini al
/* Kategori Adı */
$query = "SELECT * FROM categories WHERE id = $category_id";
$result2 = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
$row2 = mysqli_fetch_assoc($result2);
$category_name = $row2['name'];
}
$json = array('email' => array('status' => false, 'msg' => ''), 'post' => array('status' => false, 'msg' => ''));
if(!$mail->send()) {
$json['email']['msg'] = 'E-posta gönderilemedi: ' . $mail->ErrorInfo;
} else {
$json['email']['status'] = true;
$json['email']['msg'] = 'E-posta başarıyla gönderildi.';
}
// Verileri veritabanına ekleyen SQL sorgusunu oluşturun
$sql = "INSERT INTO announcements (title, body, category_id, created_user) VALUES ('$title', '$body', '$category_id', '$user_id')";
// SQL sorgusunu çalıştırın
if (mysqli_query($conn, $sql)) {
// Sorgu başarıyla çalıştırıldıysa, post eklendi
$json['post']['status'] = true;
$json['post']['msg'] = 'Post eklendi';
} else {
// Sorgu çalıştırılamadıysa, hata mesajını yazdırın
$json['post']['msg'] = 'Post eklenemedi: ' . mysqli_error($conn);
}
/* Burada mail içeriği 500 karakterden uzunsa içeriği değiştiriyoruz.*/
$mail_uzunluk_kontrolu = $body;
$body_length = str_word_count($mail_uzunluk_kontrolu);
if($body_length > 500){
$mail_uzunluk_kontrolu = "Bu duyuru içeriği karakter sınırını aştığı için görüntülenememektedir.";
}
$ozet = '
<html>
<!--[if mso]>
<style>
body,table tr,table td,a, span,table.MsoNormalTable { font-family:Arial, Helvetica, sans-serif !important; }
</style>
<!--<![endif]-->
<center><img style="text-align: center;" src="https://cloud.*****.com.tr/duyuru/assets/img/*****-logo-mail.png"></center>
<center><table>
<td valign="middle" align="center" style="width: 400px; padding-top: 20px;">
<h2 style="font-family: Arial;">['. $row2['name'] .'] '. $title .'</h2>
</td>
<td></td>
</table></center>
<center><table>
<td valign="middle" align="center" style="padding-top:20px; width: 400px;">
<p style="font-family: Arial;">'. $mail_uzunluk_kontrolu .'</p>
</td>
</table></center>
<center><table style="padding-top:20px; font-family: Arial; font-size:10px;">
<td valign="middle" align="center" style="width: 400px; font-family: Arial; font-size:10px;">
<a href="https://cloud.*****.com.tr/duyuru/duyuru_oku.php?id='. $last_id .'" style="color:#000000;">Bu yazı Outlook üzerinde düzgün görüntülenmiyor ise buraya tıklayarak Web üzerinden okuyabilirsiniz.</a>
</td>
</table></center>
<center><table style="font-family: Arial; font-size:10px;">
<td valign="middle" align="center" style="width: 400px; font-family: Arial; font-size:10px;">
<p>**Resimlerin tam boyutlu haline ulaşmak için üzerine tıklayabilirsiniz.</p>
</td>
</table></center>
</html>
';
// Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Include PHPMailer library files
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';
//require 'index.php';
// Create an instance of PHPMailer class
$mail = new PHPMailer;
// UTF-8
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
// SMTP configuration
//$mail->IsSMTP(); //Çalışmazsa etkinleştir.
$mail->Host = 'email.*****.com.tr';
$mail->SMTPAuth = true;
$mail->Username = 'enesis@*****.com.tr';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// Sender info
$mail->setFrom('enesis@*****.com.tr', '***** Duyuru Sistemi');
// Add a recipient
$mail->addAddress('tsonkaya@*****.com.tr');
//cc bölümü
//$mail->addCC('tsonkaya@*****.com.tr');
// Email subject
$mail->Subject = 'Duyuru: ['. $row2['name'] .'] '. $title .''; // İleti konusu
// Set email format to HTML
$mail->isHTML(true);
// Email body content
$mailContent = '';
$mail->Body = $ozet;
// Veritabanı bağlantısını kapatın
mysqli_close($conn);
header('Content-type: application/json');
exit(json_encode($json));
?>