Vaihda sähköpostin lähetys SMTP:ksi (mail2.fi)

- send.php: SMTP STARTTLS AUTH LOGIN smtp.mail2.fi:587 kautta
- config.php: SMTP-tunnukset erillisessä tiedostossa
- PHP mail() ei toimi koska MX osoittaa mail2.fi:hin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 11:49:13 +02:00
parent eb4662e586
commit aa0f4957d5
2 changed files with 167 additions and 18 deletions

9
config.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
// SMTP-asetukset sähköpostin lähettämiseen
define('SMTP_HOST', 'smtp.mail2.fi');
define('SMTP_PORT', 587);
define('SMTP_USER', 'box@storagebox.fi');
define('SMTP_PASS', 'Salainensana123!');
define('MAIL_FROM', 'box@storagebox.fi');
define('MAIL_FROM_NAME', 'StorageBox.fi');
define('MAIL_TO', 'box@storagebox.fi');

176
send.php
View File

@@ -1,6 +1,8 @@
<?php <?php
header('Content-Type: application/json; charset=utf-8'); header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/config.php';
// Vain POST sallittu // Vain POST sallittu
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); http_response_code(405);
@@ -31,17 +33,14 @@ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$name = str_replace(["\r", "\n"], '', $name); $name = str_replace(["\r", "\n"], '', $name);
$email = str_replace(["\r", "\n"], '', $email); $email = str_replace(["\r", "\n"], '', $email);
// Sähköpostin vastaanottaja // Sähköpostin aihe
$to = 'box@storagebox.fi';
// Aihe
$subject = 'StorageBox.fi - Yhteydenotto: ' . $name; $subject = 'StorageBox.fi - Yhteydenotto: ' . $name;
// Viestin sisältö // Viestin sisältö
$body = "Uusi yhteydenotto StorageBox.fi:n kautta\n"; $body = "Uusi yhteydenotto StorageBox.fi:n kautta\r\n";
$body .= "========================================\n\n"; $body .= "========================================\r\n\r\n";
$body .= "Nimi: {$name}\n"; $body .= "Nimi: {$name}\r\n";
$body .= "Sähköposti: {$email}\n"; $body .= "Sähköposti: {$email}\r\n";
if (!empty($package)) { if (!empty($package)) {
$packages = [ $packages = [
'mini' => 'Mini — 100 GB — 29€/v', 'mini' => 'Mini — 100 GB — 29€/v',
@@ -51,20 +50,161 @@ if (!empty($package)) {
'business' => 'Business — 2 TB — 299€/v', 'business' => 'Business — 2 TB — 299€/v',
]; ];
$packageName = $packages[$package] ?? $package; $packageName = $packages[$package] ?? $package;
$body .= "Paketti: {$packageName}\n"; $body .= "Paketti: {$packageName}\r\n";
} }
$body .= "\nViesti:\n{$message}\n"; $body .= "\r\nViesti:\r\n{$message}\r\n";
// Headerit // Lähetä SMTP:llä
$headers = "From: StorageBox.fi <box@storagebox.fi>\r\n"; $result = sendSmtp(MAIL_TO, $subject, $body, $email, $name);
$headers .= "Reply-To: {$name} <{$email}>\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "X-Mailer: StorageBox.fi Contact Form\r\n";
// Lähetä if ($result === true) {
if (mail($to, '=?UTF-8?B?' . base64_encode($subject) . '?=', $body, $headers)) {
echo json_encode(['success' => true, 'message' => 'Viesti lähetetty! Palaamme asiaan pian.']); echo json_encode(['success' => true, 'message' => 'Viesti lähetetty! Palaamme asiaan pian.']);
} else { } else {
http_response_code(500); http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Viestin lähetys epäonnistui. Ota yhteyttä suoraan: box@storagebox.fi']); echo json_encode(['success' => false, 'message' => 'Viestin lähetys epäonnistui: ' . $result]);
}
/**
* Lähettää sähköpostin SMTP:llä (STARTTLS, AUTH LOGIN)
*/
function sendSmtp($to, $subject, $body, $replyToEmail, $replyToName) {
$host = SMTP_HOST;
$port = SMTP_PORT;
$user = SMTP_USER;
$pass = SMTP_PASS;
$from = MAIL_FROM;
$fromName = MAIL_FROM_NAME;
// Yhdistä SMTP-palvelimeen
$socket = @fsockopen($host, $port, $errno, $errstr, 10);
if (!$socket) {
return "Yhteys epäonnistui: {$errstr} ({$errno})";
}
// Lue tervehdys
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '220') {
fclose($socket);
return "SMTP tervehdys epäonnistui: {$response}";
}
// EHLO
smtpWrite($socket, "EHLO storagebox.fi\r\n");
$response = smtpRead($socket);
// STARTTLS
smtpWrite($socket, "STARTTLS\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '220') {
fclose($socket);
return "STARTTLS epäonnistui: {$response}";
}
// Käynnistä TLS
$crypto = stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT);
if (!$crypto) {
fclose($socket);
return "TLS-salaus epäonnistui";
}
// EHLO uudelleen TLS:n jälkeen
smtpWrite($socket, "EHLO storagebox.fi\r\n");
$response = smtpRead($socket);
// AUTH LOGIN
smtpWrite($socket, "AUTH LOGIN\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '334') {
fclose($socket);
return "AUTH epäonnistui: {$response}";
}
// Käyttäjänimi (base64)
smtpWrite($socket, base64_encode($user) . "\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '334') {
fclose($socket);
return "Käyttäjänimi epäonnistui: {$response}";
}
// Salasana (base64)
smtpWrite($socket, base64_encode($pass) . "\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '235') {
fclose($socket);
return "Kirjautuminen epäonnistui: {$response}";
}
// MAIL FROM
smtpWrite($socket, "MAIL FROM:<{$from}>\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '250') {
fclose($socket);
return "MAIL FROM epäonnistui: {$response}";
}
// RCPT TO
smtpWrite($socket, "RCPT TO:<{$to}>\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '250') {
fclose($socket);
return "RCPT TO epäonnistui: {$response}";
}
// DATA
smtpWrite($socket, "DATA\r\n");
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '354') {
fclose($socket);
return "DATA epäonnistui: {$response}";
}
// Sähköpostin headerit ja sisältö
$encodedSubject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
$encodedFromName = '=?UTF-8?B?' . base64_encode($fromName) . '?=';
$encodedReplyName = '=?UTF-8?B?' . base64_encode($replyToName) . '?=';
$date = date('r');
$msg = "Date: {$date}\r\n";
$msg .= "From: {$encodedFromName} <{$from}>\r\n";
$msg .= "To: <{$to}>\r\n";
$msg .= "Reply-To: {$encodedReplyName} <{$replyToEmail}>\r\n";
$msg .= "Subject: {$encodedSubject}\r\n";
$msg .= "MIME-Version: 1.0\r\n";
$msg .= "Content-Type: text/plain; charset=UTF-8\r\n";
$msg .= "Content-Transfer-Encoding: 8bit\r\n";
$msg .= "X-Mailer: StorageBox.fi Contact Form\r\n";
$msg .= "\r\n";
// Escape rivit jotka alkavat pisteellä (SMTP dot-stuffing)
$msg .= str_replace("\r\n.", "\r\n..", $body);
$msg .= "\r\n.\r\n";
smtpWrite($socket, $msg);
$response = smtpRead($socket);
if (substr($response, 0, 3) !== '250') {
fclose($socket);
return "Lähetys epäonnistui: {$response}";
}
// QUIT
smtpWrite($socket, "QUIT\r\n");
fclose($socket);
return true;
}
function smtpWrite($socket, $data) {
fwrite($socket, $data);
}
function smtpRead($socket) {
$response = '';
while ($line = fgets($socket, 515)) {
$response .= $line;
// Viimeinen rivi: kolme numeroa + välilyönti
if (isset($line[3]) && $line[3] === ' ') {
break;
}
}
return trim($response);
} }