• 12-01-2023, 18:31:45
    #1
    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.php
    Post 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));
    ?>
  • 12-01-2023, 18:35:28
    #2
    Bunları en başa taşıyın
    Alıntı

    // Import PHPMailer classes into the global namespace
    use PHPMailerPHPMailerPHPMailer;
    use PHPMailerPHPMailerException;

    // 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;
  • 12-01-2023, 18:39:51
    #3
    webkaplani adlı üyeden alıntı: mesajı görüntüle
    Bunları en başa taşıyın
    Bu şekilde düzeltince veritabanına kayıt yapabiliyorum fakat mail yine gitmiyor.
  • 13-01-2023, 16:41:36
    #4
    Canlı kontrol etmek gerekir kodları nerede sorun olduğun buna göre bulup eklemek gerekir.
  • 14-01-2023, 14:54:58
    #5
    Adalente adlı üyeden alıntı: mesajı görüntüle
    Canlı kontrol etmek gerekir kodları nerede sorun olduğun buna göre bulup eklemek gerekir.
    Sorunu aşağıdaki kod sıralaması ile çözdüm, teşekkür ederim.
    <?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
    
    
    /* duyuru_duzenle.php üzerinden alınan veriler */
    $title = trim($_POST['title']);
    $body = trim($_POST['body']);
    $category_id = trim($_POST['category_id']);
    $created_user = $user_id; // Kullanıcının id'sini al
    
    
    $json = array('email' => array('status' => false, 'msg' => ''), 'post' => array('status' => false, 'msg' => ''));
    
    // 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);
      exit(json_encode($json));
    }
    
    $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']);
    */
    
    $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'];
    }
    
    /* 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 Outlook üzerinde düzgün görüntülenememektedir.
        </br>
        </br>
        <a href="https://cloud.*****.com.tr/duyuru/duyuru_oku.php?id='. $last_id .'" style="color:#000000;">Bu yazının tamamını buraya tıklayarak okuyabilirsiniz.</a>
        ';
    }
    
    $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 = '@*****.com.tr';
    $mail->Password = '';
    $mail->SMTPSecure = 'tls';
    $mail->Port     = 587;
    
    // Sender info 
    $mail->setFrom('@*****.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;
    
    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.';
    } 
    
    // Veritabanı bağlantısını kapatın
    mysqli_close($conn);
    
    header('Content-type: application/json');
    
    exit(json_encode($json));
    ?>