contact
This commit is contained in:
35
.htaccess
35
.htaccess
@@ -6,3 +6,38 @@
|
|||||||
AddHandler application/x-httpd-ea-php82___lsphp .php .php8 .phtml
|
AddHandler application/x-httpd-ea-php82___lsphp .php .php8 .phtml
|
||||||
</IfModule>
|
</IfModule>
|
||||||
# php -- END cPanel-generated handler, do not edit
|
# php -- END cPanel-generated handler, do not edit
|
||||||
|
|
||||||
|
|
||||||
|
# RewriteEngine On
|
||||||
|
|
||||||
|
# # Remove .php extension from URLs (e.g., /contactt -> contact.php)
|
||||||
|
# RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
# RewriteCond %{REQUEST_FILENAME}\.php -f
|
||||||
|
# RewriteRule ^(.*)$ $1.php [L]
|
||||||
|
|
||||||
|
# # Redirect direct access to .php files to clean URLs (optional)
|
||||||
|
# RewriteCond %{THE_REQUEST} \s/+(.*?)\.php[\s?] [NC]
|
||||||
|
# RewriteRule ^ /%1 [R=301,L,NE]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<Files "mailContact.php">
|
||||||
|
RewriteEngine Off
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
|
||||||
|
RewriteEngine On
|
||||||
|
DirectoryIndex index.php
|
||||||
|
|
||||||
|
# 1. Redirect any index.php request to its directory URL
|
||||||
|
RewriteCond %{THE_REQUEST} \s/(.*)index\.php[\s?] [NC]
|
||||||
|
RewriteRule ^(.*)index\.php$ /%1 [R=301,L]
|
||||||
|
|
||||||
|
# 2. Remove .php extension from URLs (e.g., /contactt -> contact.php)
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
RewriteCond %{REQUEST_FILENAME}\.php -f
|
||||||
|
RewriteRule ^(.*)$ $1.php [L]
|
||||||
|
|
||||||
|
# 3. Redirect direct access to .php files to clean URLs (optional)
|
||||||
|
RewriteCond %{THE_REQUEST} \s/+(.*?)\.php[\s?] [NC]
|
||||||
|
RewriteRule ^ /%1 [R=301,L,NE]
|
||||||
|
55
bib-toaster/toaster.css
Normal file
55
bib-toaster/toaster.css
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
.flash-toaster {
|
||||||
|
position: fixed;
|
||||||
|
top: 1rem;
|
||||||
|
right: 1rem;
|
||||||
|
z-index: 9999;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
min-width: 250px;
|
||||||
|
max-width: 320px;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #fff;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||||
|
transform: translateX(100%); /* start off-screen */
|
||||||
|
opacity: 0;
|
||||||
|
transition: transform 0.4s ease, opacity 0.4s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.show {
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status colors */
|
||||||
|
.toast--success {
|
||||||
|
background: #198754;
|
||||||
|
}
|
||||||
|
.toast--error {
|
||||||
|
background: #dc3545;
|
||||||
|
}
|
||||||
|
.toast--warning {
|
||||||
|
background: #ffc107;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Close button */
|
||||||
|
.toast__close {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
color: inherit;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
line-height: 1;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide animation */
|
||||||
|
.toast.hide {
|
||||||
|
transform: translateX(100%);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
27
bib-toaster/toaster.js
Normal file
27
bib-toaster/toaster.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const toast = document.getElementById('flashToast');
|
||||||
|
if (!toast) return;
|
||||||
|
|
||||||
|
// Show it
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
toast.classList.add('show');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close on [×]
|
||||||
|
toast.querySelector('.toast__close').addEventListener('click', () => {
|
||||||
|
hideToast();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Auto-hide after 3s
|
||||||
|
const hideTimeout = setTimeout(hideToast, 3000);
|
||||||
|
|
||||||
|
function hideToast(){
|
||||||
|
clearTimeout(hideTimeout);
|
||||||
|
toast.classList.add('hide');
|
||||||
|
// Remove from DOM after transition
|
||||||
|
toast.addEventListener('transitionend', () => {
|
||||||
|
toast.remove();
|
||||||
|
}, { once: true });
|
||||||
|
}
|
||||||
|
});
|
@@ -80,6 +80,7 @@
|
|||||||
|
|
||||||
<!-- Template Javascript -->
|
<!-- Template Javascript -->
|
||||||
<script src="js/main.js"></script>
|
<script src="js/main.js"></script>
|
||||||
|
<script src="bib-toaster/toaster.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
<!-- Template Stylesheet -->
|
<!-- Template Stylesheet -->
|
||||||
<link href="css/style.css" rel="stylesheet">
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
<link href="bib-toaster/toaster.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
217
mailContact.php
Normal file
217
mailContact.php
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
<?php include('mailCredentials.php'); ?>
|
||||||
|
<?php
|
||||||
|
use PHPMailer\PHPMailer\PHPMailer;
|
||||||
|
use PHPMailer\PHPMailer\Exception;
|
||||||
|
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
|
||||||
|
// Enable error reporting
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
|
// Get form data
|
||||||
|
$name = htmlspecialchars(trim($_POST['name']));
|
||||||
|
$user_email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL);
|
||||||
|
$phone = htmlspecialchars(trim($_POST['phone']));
|
||||||
|
$address = htmlspecialchars(trim($_POST['address']));
|
||||||
|
$subject = htmlspecialchars(trim($_POST['subject']));
|
||||||
|
$message = htmlspecialchars(trim($_POST['message']));
|
||||||
|
|
||||||
|
if (!empty($name) && !empty($user_email) && !empty($phone) && !empty($subject) && !empty($message)) {
|
||||||
|
try {
|
||||||
|
// Send confirmation email to user
|
||||||
|
$userMail = new PHPMailer(true);
|
||||||
|
|
||||||
|
// SMTP Configuration
|
||||||
|
$userMail->isSMTP();
|
||||||
|
$userMail->Host = 'smtp.gmail.com';
|
||||||
|
$userMail->SMTPAuth = true;
|
||||||
|
$userMail->Username = $sending_email;
|
||||||
|
$userMail->Password = $app_password;
|
||||||
|
$userMail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||||
|
$userMail->Port = 587;
|
||||||
|
|
||||||
|
// User Email Configuration
|
||||||
|
$userMail->setFrom($sending_email, $support_name);
|
||||||
|
$userMail->addAddress($user_email);
|
||||||
|
$userMail->isHTML(true);
|
||||||
|
$userMail->Subject = "Thank you for contacting " . $support_name;
|
||||||
|
|
||||||
|
// Embed logo
|
||||||
|
$userMail->addEmbeddedImage('img/Orient.png', 'logo_cid');
|
||||||
|
|
||||||
|
// User Email Template
|
||||||
|
$userMail->Body = <<<HTML
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
.email-card { max-width: 800px; margin: 2rem auto; border-radius: 15px; }
|
||||||
|
.company-logo { height: 60px; margin-bottom: 1rem; }
|
||||||
|
.disclaimer { font-size: 0.8rem; color: #666; }
|
||||||
|
.highlight-box { background: #f8f9fa; border-radius: 10px; padding: 1.5rem; margin: 1rem 0; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="card email-card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="text-center mb-4">
|
||||||
|
<!-- Use the cid reference for the embedded image -->
|
||||||
|
<img src="cid:logo_cid" alt="Company Logo" class="company-logo">
|
||||||
|
</div>
|
||||||
|
<div class="text-center mb-4">
|
||||||
|
<div class="text-success">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="currentColor" class="bi bi-check2-circle" viewBox="0 0 16 16">
|
||||||
|
<path d="M2.5 8a5.5 5.5 0 0 1 8.25-4.764.5.5 0 0 0 .5-.866A6.5 6.5 0 1 0 14.5 8a.5.5 0 0 0-1 0 5.5 5.5 0 1 1-11 0z"/>
|
||||||
|
<path d="M15.354 3.354a.5.5 0 0 0-.708-.708L8 9.293 5.354 6.646a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l7-7z"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<h2 class="mt-3">Message Received!</h2>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-box">
|
||||||
|
<p class="lead">Thank you for contacting us, $name!</p>
|
||||||
|
<p>We've successfully received your message and our team will get back to you within 24-48 hours.</p>
|
||||||
|
<p class="text-muted"><small>Your email address ($user_email) is safe with us. We never share your information with third parties.</small></p>
|
||||||
|
</div>
|
||||||
|
<footer class="mt-4 text-center">
|
||||||
|
<div class="disclaimer">
|
||||||
|
<p class="mb-1"><strong> $company_name; </strong></p>
|
||||||
|
<p class="mb-1">$company_address; </p>
|
||||||
|
<p class="mb-1">Email: $company_email; | Phone: $company_phone; </p>
|
||||||
|
<hr>
|
||||||
|
<p class="mb-0"><em>If you didn't initiate this contact, please ignore this email. This may have been sent in error.</em></p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
HTML;
|
||||||
|
|
||||||
|
// Send admin email
|
||||||
|
$adminMail = new PHPMailer(true);
|
||||||
|
$adminMail->isSMTP();
|
||||||
|
$adminMail->Host = 'smtp.gmail.com';
|
||||||
|
$adminMail->SMTPAuth = true;
|
||||||
|
$adminMail->Username = $sending_email;
|
||||||
|
$adminMail->Password = $app_password;
|
||||||
|
$adminMail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||||
|
$adminMail->Port = 587;
|
||||||
|
|
||||||
|
$adminMail->setFrom($sending_email, $support_name);
|
||||||
|
$adminMail->addAddress($company_email);
|
||||||
|
$adminMail->addReplyTo($user_email, $name);
|
||||||
|
$adminMail->isHTML(true);
|
||||||
|
$adminMail->Subject = "New Contact: $subject";
|
||||||
|
|
||||||
|
// Embed logo for admin email
|
||||||
|
$adminMail->addEmbeddedImage('img/Orient.png', 'logo_cid');
|
||||||
|
|
||||||
|
// Admin Email Template
|
||||||
|
$currentDateTime = date('Y-m-d H:i:s');
|
||||||
|
$adminMail->Body = <<<HTML
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
.email-card { max-width: 800px; margin: 2rem auto; border-radius: 15px; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); }
|
||||||
|
.company-logo { height: 80px; margin-bottom: 1.5rem; }
|
||||||
|
.detail-badge { background: #f8f9fa; border-radius: 8px; padding: 1rem; margin: 0.5rem; flex: 1 1 45%; }
|
||||||
|
.reply-btn { padding: 12px 30px; border-radius: 8px; transition: all 0.3s ease; }
|
||||||
|
.highlight-box { background: linear-gradient(145deg, #f8f9fa, #ffffff); border-radius: 12px; padding: 2rem; margin: 1.5rem 0; box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="card email-card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="text-center mb-4">
|
||||||
|
<!-- Use the cid reference for the embedded image -->
|
||||||
|
<img src="cid:logo_cid" alt="Company Logo" class="company-logo">
|
||||||
|
</div>
|
||||||
|
<div class="alert alert-primary py-3">
|
||||||
|
<h2 class="alert-heading fs-4 mb-3">📬 New Contact Form Submission</h2>
|
||||||
|
<p class="mb-0">Action required: Please respond to the user inquiry</p>
|
||||||
|
</div>
|
||||||
|
<div class="text-center mb-4">
|
||||||
|
<a href="mailto:$user_email?subject=Re: $subject" class="btn btn-primary reply-btn">✉️ Reply to $name</a>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-box">
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-12"><h4 class="mb-3">👤 User Details</h4></div>
|
||||||
|
<div class="col-md-6"><div class="detail-badge"><span class="text-muted small">Full Name</span><div class="fw-bold text-dark">$name</div></div></div>
|
||||||
|
<div class="col-md-6"><div class="detail-badge"><span class="text-muted small">Email Address</span><div class="fw-bold text-primary">$user_email</div></div></div>
|
||||||
|
<div class="col-md-6"><div class="detail-badge"><span class="text-muted small">Phone Number</span><div class="fw-bold text-dark">$phone</div></div></div>
|
||||||
|
<div class="col-md-6"><div class="detail-badge"><span class="text-muted small">Address</span><div class="fw-bold text-dark">$address</div></div></div>
|
||||||
|
<div class="col-md-6"><div class="detail-badge"><span class="text-muted small">Subject</span><div class="fw-bold text-info">$subject</div></div></div>
|
||||||
|
<div class="col-12"><div class="detail-badge"><span class="text-muted small">Message</span><div class="fw-bold text-dark mt-2">$message</div></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer class="mt-4 text-center">
|
||||||
|
<div class="disclaimer">
|
||||||
|
<div class="row g-2">
|
||||||
|
<div class="col-12">
|
||||||
|
<p class="mb-1"><strong>🏢 $company_name;</strong></p>
|
||||||
|
<p class="mb-1">📍 $company_address; </p>
|
||||||
|
<p class="mb-1">📧 $company_email; | 📞 $company_phone; </p>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<hr>
|
||||||
|
<p class="small text-muted mb-0">⚠️ Automated message - Received at: $currentDateTime</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
HTML;
|
||||||
|
|
||||||
|
// Send emails
|
||||||
|
$userMail->send();
|
||||||
|
$adminMail->send();
|
||||||
|
|
||||||
|
// Redirect to prevent resubmission
|
||||||
|
header("Location: contact.php?status=success");
|
||||||
|
exit();
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$errorMessage = urlencode($e->getMessage()); // Encode for safe URL usage
|
||||||
|
header("Location: contact.php?status=error&message=$errorMessage");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
header("Location: contact.php?status=missing_fields");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Include header after potential redirects
|
||||||
|
// include('header.php');
|
||||||
|
|
||||||
|
// Handle status messages
|
||||||
|
if (isset($_GET['status'])) {
|
||||||
|
switch ($_GET['status']) {
|
||||||
|
case 'success':
|
||||||
|
// After successful email sending
|
||||||
|
header("Location: contact.php?status=success");
|
||||||
|
exit();
|
||||||
|
|
||||||
|
case 'error':
|
||||||
|
header("Location: contact.php?status=error");
|
||||||
|
exit();
|
||||||
|
|
||||||
|
case 'missing_fields':
|
||||||
|
header("Location: contact.php?status=missing_fields");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
9
mailCredentials.php
Normal file
9
mailCredentials.php
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
#you are required to change these credential only
|
||||||
|
$company_name= "Orient International Study";
|
||||||
|
$support_name= "Orient International Study";
|
||||||
|
$company_address = 'Kathmandu, Nepal';
|
||||||
|
$company_email = 'dangolalika2017@gmail.com';
|
||||||
|
$company_phone = +9000000000;
|
||||||
|
$sending_email = 'noreply.notification.developer@gmail.com';
|
||||||
|
$app_password= 'uuky rjvm expm notx';
|
Reference in New Issue
Block a user