mikropiks adlı üyeden alıntı: mesajı görüntüle
$last_id = $row['id'] +1;
Bu kısımda son id değerini alırken neden +1 yaptığınızı anlayamadım açıkcası. Teoride $row['id'] dierkt son id değerini vermesi gerekli.
Duyuruyu POST ettiğim sayfada bir mantık hatam var sanırım o yüzden son duyurunun ID'sine 1 ekleyip link atıyordum.
İlk önce mail göndertip daha sonra veritabanına kayıt ediyor anladığım kadarıyla şuan bu yapı;

<?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


$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'] +1;


// 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']);
$category_id = trim($_POST['category_id']);
$created_user = $user_id; // Kullanıcının id'sini al

$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'];
}

$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;">'. $body .'</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 = '****';
$mail->SMTPSecure = 'tls';
$mail->Port     = 587;

// Sender info
$mail->setFrom('enesis@*****.com.tr', '***** Duyuru Sistemi');
 
// Add a recipient
$mail->addAddress('tsonkaya@*****.com.tr');
//$mail->addAddress('skaraca@*****.com.tr');
//$mail->addAddress('tturna@*****.com.tr');
//$mail->addAddress('scifci@*****.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;

$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);
}


// Veritabanı bağlantısını kapatın
mysqli_close($conn);

header('Content-type: application/json');

exit(json_encode($json));
?>