Создайте электронную почту, щелкнув URL-адрес

Я хотел бы иметь возможность отправить электронное письмо, введя URL-адрес, например

example.com/api/send-email?email=bob@example.org&name=Robert&template=job2231 

затем электронное письмо отправляется на основе предварительно настроенного шаблона, который принимает параметры email, name.

Я бы вошел в example.com через их веб-интерфейс, поэтому в идеале аутентификация обрабатывается в фоновом режиме - по отношению к отправке электронной почты. Конечно, если вы не вошли в систему, электронная почта не отправляется.

Есть ли у вас какие-либо рекомендации для example.com или эквивалентного продукта? Можно разместить на хостинге или самостоятельно.

Это должен быть комментарий, но у меня недостаточно репутации. Будет ли это обычная ссылка, и электронное письмо будет отправлено, как только пользователь откроет ее в браузере? В этом случае пользователи могут отправлять его слишком часто случайно. Иногда, когда они посещают его сами, иногда, когда браузеры синхронизируются автоматически. Была история про разработчика, который добавил автоматику гаражных ворот по ссылке и у него это произошло: twitter.com/rombulow/status/990684453734203392 . Одним из обходных путей может быть просьба к пользователю нажать кнопку, чтобы подтвердить отправку электронного письма. Это приемлемо?

Ответы (1)

Решение для самостоятельного хостинга (дешевое и настраиваемое, но вы берете на себя риски и ответственность за его защиту):

Создайте один файл index.php и разместите его на сервере PHP.

<?php 
if(isset($_POST['submit'])){
    $to = $_POST['email'];
    $from = "mailer@yourcompany.com";
    $name = $_POST['name'];
    $subject = "Sample Subject";
    $message = $name . " " . " wrote the following:" . "\n\n" . $_POST['message'];

    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);

    // If you want to have a success page, uncomment the next line
    // header('Location: thank_you.php'); 
    // to redirect to another page.
    // you need to create another file named thank_you.php
    }
?>

<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>

<form action="" method="post">
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html> 

РЕДАКТИРОВАТЬ: для аутентификации вы можете сделать что-то простое, используя HTTP-аутентификацию (это не супербезопасно или что-то в этом роде, но оно просто выполняет свою работу)

<?php
    $AUTH_USER = 'admin';
    $AUTH_PASS = 'admin';
    header('Cache-Control: no-cache, must-revalidate, max-age=0');
    $has_supplied_credentials = !(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['PHP_AUTH_PW']));
    $is_not_authenticated = (
        !$has_supplied_credentials ||
        $_SERVER['PHP_AUTH_USER'] != $AUTH_USER ||
        $_SERVER['PHP_AUTH_PW']   != $AUTH_PASS
    );
    if ($is_not_authenticated) {
        header('HTTP/1.1 401 Authorization Required');
        header('WWW-Authenticate: Basic realm="Access denied"');
        exit;
    } else {
        // all that code from above goes here...
    }
?>  
Примечание. Спрашивающему также требуется аутентификация, это легко с сервером, таким как Apache, но вы можете добавить абзац об этом :-)