71 lines
2.2 KiB
Bash
Executable File
71 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# mail-switch.sh — toggle between Mailpit (local testing) and real SMTP server
|
|
# Usage: ./scripts/mail-switch.sh [mailpit|real]
|
|
# Without argument: auto-detects current mode and toggles
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
APP_DIR="$(dirname "$SCRIPT_DIR")"
|
|
ENV_FILE="$APP_DIR/.env"
|
|
REAL_ENV="$SCRIPT_DIR/mail-real.env"
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
echo "ERROR: .env file not found at $ENV_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$REAL_ENV" ]]; then
|
|
echo "ERROR: mail-real.env not found at $REAL_ENV"
|
|
echo "Create it with your real SMTP settings."
|
|
exit 1
|
|
fi
|
|
|
|
# Read current MAIL_HOST from .env
|
|
current_host=$(grep -E "^MAIL_HOST=" "$ENV_FILE" | cut -d= -f2 | tr -d '"' | tr -d "'")
|
|
|
|
# Determine target mode
|
|
if [[ "${1:-}" == "mailpit" ]]; then
|
|
target="mailpit"
|
|
elif [[ "${1:-}" == "real" ]]; then
|
|
target="real"
|
|
elif [[ "$current_host" == "localhost" || "$current_host" == "127.0.0.1" ]]; then
|
|
target="real"
|
|
echo "Current mode: Mailpit → switching to real SMTP"
|
|
else
|
|
target="mailpit"
|
|
echo "Current mode: real SMTP ($current_host) → switching to Mailpit"
|
|
fi
|
|
|
|
set_env_value() {
|
|
local key="$1"
|
|
local value="$2"
|
|
# Replace the key=value line in .env (handles empty values too)
|
|
sed -i "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
|
|
}
|
|
|
|
if [[ "$target" == "mailpit" ]]; then
|
|
set_env_value "MAIL_MAILER" "smtp"
|
|
set_env_value "MAIL_HOST" "localhost"
|
|
set_env_value "MAIL_PORT" "1025"
|
|
set_env_value "MAIL_USERNAME" ""
|
|
set_env_value "MAIL_PASSWORD" ""
|
|
set_env_value "MAIL_ENCRYPTION" "null"
|
|
echo "Mail switched to: Mailpit (localhost:1025)"
|
|
else
|
|
# Load real SMTP settings from mail-real.env
|
|
while IFS='=' read -r key value; do
|
|
# Skip comments and empty lines
|
|
[[ "$key" =~ ^#.*$ || -z "$key" ]] && continue
|
|
set_env_value "$key" "$value"
|
|
done < "$REAL_ENV"
|
|
real_host=$(grep -E "^MAIL_HOST=" "$REAL_ENV" | cut -d= -f2)
|
|
echo "Mail switched to: real SMTP ($real_host)"
|
|
fi
|
|
|
|
# Clear config cache and restart queue workers
|
|
cd "$APP_DIR"
|
|
php artisan config:clear
|
|
php artisan queue:restart
|
|
echo "Done. Config cleared and queue workers restarted."
|