Hãy cùng Nam tìm hiểu về cách tích hợp tính năng gửi Email và tạo bản ghi trên Google Sheet nhé

Dự án gần đây của Nam là xây dựng Landing page và đẩy lên server Apache / PHP - môi trường Setup Hosting cơ bản, thường thì với Landing, việc sử dụng Wordpress hoặc Ladipage cũng đang đến rất nhiều tiện lợi, nhưng với bản tính Tech Nerd thì Anyway, hãy cùng xử lý mọi thứ một cách nguyên thủy nhất xem nào (Sử dụng PHP và HTML để dựng Landing cho máu)

Điều kiện tiên quyết

  • Môi trường máy ảo Xampp, Laragon... tùy bạn miễn là chạy được Webserver và PHP
  • Composer (Gần đây mình mới vọc thì thấy nó cũng khá tiện) không khác gì NPM cào về các file Vendor rất tiện, có thể nói là dùng cũng không thua gì thư viện của Golang
  • Chatgpt nhé!

Xây dựng môi trường Frontend và Form trỏ tới hàm gửi Email và in dữ liệu lên Google Sheet

                            
 

 

Cơ bản thì thì mình xây 1 cái Form và nó sẽ trỏ tới hàm send_email.php nằm cùng cấp với bảng dữ liệu, như hình dưới là cấu trúc ổn nha

Lập App Password cho Email để thực hiện gửi Mail

Phần này thì đã có rất nhiều hướng dẫn rồi, bạn có thể tham khảo tại bài viết này, sau khi có App Password và Email gửi đi, ta sẽ lấy nó làm cơ sở để thực hiện gửi Email cho khách hàng điền Form 

Bật Google Sheet API và Đăng ký Services App trên Google Cloud Console

  • Truy cập Google Cloud Console.
  • Tạo một dự án mới hoặc chọn dự án hiện tại.
  • Tìm kiếm và kích hoạt Google Sheets API.
  • Tạo Service Account Key trong mục APIs & Services > Credentials và tải file JSON về, ta sẽ để file JSON này cùng cấp với dự án

Xây dựng hàm send_email.php với cấu trúc như sau

isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = $smtpUser;
        $mail->Password = $smtpPassword;
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = 587;

        // Email người gửi và người nhận
        $mail->setFrom($smtpUser, 'PJCO Fest');
        $mail->addAddress($email, $name);

        // Tải template email
        $template = file_get_contents('email_template.html');

        // Thay thế các placeholder trong template
        $emailContent = str_replace([
            '{{name}}',
            '{{birthYear}}',
            '{{phone}}',
            '{{email}}',
            '{{city}}'
        ], [
            $name,
            $birthYear,
            $phone,
            $email,
            $city
        ], $template);

        // Nội dung email
        $mail->isHTML(true);
        $mail->Subject = '=?UTF-8?B?' . base64_encode('Bạn nhận được 1 thông báo mới') . '?=';
        $mail->Body = $emailContent;

        // Gửi email
        $mail->send();
        echo 'Email đã được gửi thành công.';

        // Cập nhật Google Sheets
        $client = new Client();
        $client->setApplicationName('Người đăng ký mới');
        $client->setScopes(Sheets::SPREADSHEETS);
        $client->setAuthConfig('kinetic-center-291115-1695aeb2a408.json'); // Đường dẫn tới file JSON

        $sheetsService = new Sheets($client);
        $values = [
            [$name, $birthYear, $phone, $email, $city] // Dữ liệu ghi vào Sheets
        ];
        $body = new Sheets\ValueRange(['values' => $values]);
        $params = ['valueInputOption' => 'RAW'];
        $sheetsService->spreadsheets_values->append($spreadsheetId, $range, $body, $params);

        echo ' Dữ liệu đã được cập nhật vào Google Sheets.';

    } catch (Exception $e) {
        echo "Không thể gửi email. Lỗi: {$mail->ErrorInfo}";
    }


}

Nhớ khai báo đầy đủ Username và App Password nhé

Mình mất khá nhiều công Debug bản mới được tạo ra từ chatgpt, nhưng cuối cùng phát hiện ra đã bỏ quên đoạn $mail->Username ra khỏi khai báo STMP, thế là ngồi lúi cúi nửa buổi được giải quyết bằng một cái bổ sung đơn giản. 

Bình luận cho Nam qua zalo nhé!