> For the complete documentation index, see [llms.txt](https://niaxus.gitbook.io/rosure/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://niaxus.gitbook.io/rosure/setup-and-configuration/images-and-media/markdown.md).

# 07 Enabling the Contact Form

* **id:** contact
* **Section number:** 07

1. This project uses Composer for dependency management and PHPMailer for handling email sending in the contact form. Ensure the `vendor/` directory contains the PHPMailer library.
2. Store sensitive data (e.g., email credentials) in the `.env` file located in the `env/` folder. Use the following format:

```
SMTP_HOST=smtp.gmail.com
SMTP_USER=your-email@example.com
SMTP_PASS=your-email-password
SMTP_SECURE=tls
FROM_EMAIL=your-email@example.com
FROM_NAME="Your Name or Portfolio Name"
```

{% hint style="warning" %}
**Note**: The `.env` file should never be placed inside the `public_html` or any publicly accessible directory. Always move it outside of the public directory to ensure security, and update the `$dotenv` path in the `send_email.php` script accordingly 👇:

```php
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
```

{% endhint %}

3. **Understanding `SMTP_SECURE`**

   The `SMTP_SECURE` variable specifies the encryption protocol for securing the connection to the SMTP server. Common values include:

   * **`tls`**: Recommended for most servers, including Gmail, as it provides strong encryption while using the default SMTP port (587).
   * **`ssl`**: Uses a different port (usually 465) and provides an additional layer of encryption during the connection.

   Using the correct encryption type is crucial for establishing a secure connection with the SMTP server. Always confirm the required protocol with your email provider.
4. **Generate SMTP Password**: For Gmail users, generate an **App Password** to use as `SMTP_PASS` instead of your primary email password. For other email providers, follow their guidelines for generating secure credentials
5. **Edit Configurations**: Update the send\_email.php script to load the .env file and retrieve the credentials securely as well as edit the body of the email ($email\_body) if you wish:

```php
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require '../vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();

$config = [
    'smtp_host' => $_ENV['SMTP_HOST'],
    'smtp_user' => $_ENV['SMTP_USER'],
    'smtp_pass' => $_ENV['SMTP_PASS'],
    'smtp_secure' => $_ENV['SMTP_SECURE'],
    'from_email' => $_ENV['FROM_EMAIL'],
    'from_name' => $_ENV['FROM_NAME']
];

// Capture form data
$name = htmlspecialchars($_POST['name'] ?? 'Name not provided');
$email = htmlspecialchars($_POST['email'] ?? 'Email not provided');
$message = htmlspecialchars($_POST['message'] ?? 'Message not provided');

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host       = $config['smtp_host'];
    $mail->SMTPAuth   = true;
    $mail->Username   = $config['smtp_user'];
    $mail->Password   = $config['smtp_pass'];
    $mail->SMTPSecure = $config['smtp_secure'];
    $mail->Port       = 587;
    
    $mail->setFrom($config['from_email'], $config['from_name']);
    
    // Add the recipient email address here
    $mail->addAddress('your-email-here'); 

    $mail->isHTML(true);
    $mail->Subject = 'New Message from Rosure Portfolio';
    $mail->Body    = "
        <h2>New Message</h2>
        <p><strong>Name:</strong> {$name}</p>
        <p><strong>Email:</strong> {$email}</p>
        <p><strong>Message:</strong></p>
        <p>{$message}</p>
    ";

    $mail->send();
    echo "Message sent succesfully.";
} catch (Exception $e) {
    http_response_code(500);
    echo "Error sending message: {$mail->ErrorInfo}";
}
?>

```

{% hint style="warning" %}
**Important**: Replace `your-email-here` in the `$mail->addAddress()` function with the email address where you want to receive the messages. This step is critical for ensuring the contact form works as expected.
{% endhint %}

5. **Test the Form** (**Running the Project Locally)**

If your project is not yet deployed online, you can run it locally using one of the following methods:

1. **Using XAMPP:**
   * Place the project folder inside the `htdocs` directory of XAMPP.
   * Start Apache and MySQL from the XAMPP control panel.
   * Access your project in the browser using the URL:\
     `http://localhost/<your-project-folder>/public`
2. **Using PHP's Built-in Server:**
   * Navigate to the `public` folder of your project in the terminal.
   * Start the server with the command:

     ```bash
     php -S localhost:8000
     ```
   * Open your browser and navigate to:\
     `http://localhost:8000`


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://niaxus.gitbook.io/rosure/setup-and-configuration/images-and-media/markdown.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
