20

私は、ローカル メール クライアントを開かずに電子メールをサイレント モードで送信する登録ボタンを含む HTML ページを作成しています。ここに私のHTMLがあります:

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail(); return false">Send Email</button>
</form>

...そしてこれが私のJavaScriptコードです:

<script type="text/javascript">
  function sendMail() {
    var link = 'mailto:hello@domain.com?subject=Message from '
             +document.getElementById('email_address').value
             +'&body='+document.getElementById('email_address').value;
    window.location.href = link;
}
</script>

上記のコードは機能しますが、ローカルの電子メール クライアントが開きます。次のように属性のreturnステートメントを削除すると:onclick

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail()">Send Email</button>
</form>

...その後、メールはまったく送信されません。何か不足していますか?

どんな助けでも大歓迎です:-)

4

8 に答える 8

15

ユーザーのブラウザがサイレント モードで電子メールを送信するようにすることはできません。どの Web サイトでもシステムをスパム リレーとして使用したり、メール アドレスを収集したりする可能性があるため、これはセキュリティ上の恐ろしい問題です。

サーバーからメールを送信するサーバー側のプロセス (選択した言語で記述) に対して HTTP 要求を行う必要があります。

于 2013-01-10T22:59:43.827 に答える
15

これを実現するには、サーバー側のサポートが必要です。基本的に、フォームはサーバーに投稿する必要があり (AJAX も問題ありません)、そのサーバーは SMTP 経由でメール プロバイダーに接続し、その電子メールを送信する必要があります。

JavaScript を使用して (つまり、ユーザーのコンピューターから) 電子メールを直接送信できたとしても、ユーザーは何らかの SMTP サーバー (gmail.com など) に接続し、SMTP 資格情報を提供する必要があります。これは通常、これらの資格情報を知っているサーバー側 (アプリケーション内)。

于 2013-01-10T22:59:56.940 に答える
9

クライアントから直接


JavaScript のみを使用してメールを送信する

in short: 
1. register for Mandrill to get an API key
2. load jQuery
3. use $.ajax to send an email

このような -

function sendMail() {
    $.ajax({
      type: 'POST',
      url: 'https://mandrillapp.com/api/1.0/messages/send.json',
      data: {
        'key': 'YOUR API KEY HERE',
        'message': {
          'from_email': 'YOUR@EMAIL.HERE',
          'to': [
              {
                'email': 'RECIPIENT@EMAIL.HERE',
                'name': 'RECIPIENT NAME (OPTIONAL)',
                'type': 'to'
              }
            ],
          'autotext': 'true',
          'subject': 'YOUR SUBJECT HERE!',
          'html': 'YOUR EMAIL CONTENT HERE! YOU CAN USE HTML!'
        }
      }
     }).done(function(response) {
       console.log(response); // if you're into that sorta thing
     });
}

https://medium.com/design-startups/b53319616782

注: API キーは誰にでも表示されるため、悪意のあるユーザーがキーを使用してメールを送信し、クォータを使い果たす可能性があることに注意してください。


あなたのサーバー経由で間接的に- 安全


上記の脆弱性を克服するには、独自のサーバーを変更して、セッション ベースの認証後に電子メールを送信することができます。

node.js - https://www.npmjs.org/package/node-mandrill

var mandrill = require('node-mandrill')('<your API Key>'); 

function sendEmail ( _name, _email, _subject, _message) {
    mandrill('/messages/send', {
        message: {
            to: [{email: _email , name: _name}],
            from_email: 'noreply@yourdomain.com',
            subject: _subject,
            text: _message
        }
    }, function(error, response){
        if (error) console.log( error );
        else console.log(response);
    });
}

// define your own email api which points to your server.

app.post( '/api/sendemail/', function(req, res){

    var _name = req.body.name;
    var _email = req.body.email;
    var _subject = req.body.subject;
    var _messsage = req.body.message;

    //implement your spam protection or checks. 

    sendEmail ( _name, _email, _subject, _message );

});

次に、クライアントで $.ajax を使用してメール API を呼び出します。

于 2014-12-02T07:46:47.453 に答える
4

クライアント側のスクリプトだけではできません...メールを送信するサーバー側のコードにAJAX呼び出しを行うことができます...

于 2013-01-10T23:00:11.077 に答える
1

メールを送信するには、ある種のバックエンド フレームワークが必要です。これは、PHP/ASP.NET またはローカル メール クライアントを使用して実行できます。ユーザーに何も見せたくない場合、最善の方法は、別の send_email ファイルへの AJAX 呼び出しによってそれらを利用することです。

于 2013-01-10T23:00:42.177 に答える
0

サーバー上で直接行う必要があります。しかし、より良い方法は PHP を使用することです。PHP には、メール クライアントを開かずに直接電子メールを送信できる特別なコードがあると聞きました。

于 2013-01-10T23:01:59.270 に答える
0

まあ、PHPはこれを簡単に行うことができます。

mail()PHP関数で実行できます。単純な関数は次のようになります。

<?php     
$to_email = 'name@company.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@company.com';
mail($to_email,$subject,$message,$headers);
?>

これにより、 で指定された受信者にバックグラウンド電子メールが送信されます$to_email

上記の例では、簡単にするために、ソース コードで電子メール アドレスやその他の詳細にハード コーディングされた値を使用しています。

ユーザーが詳細を入力して送信するための連絡先フォームを作成する必要があるとします。

  1. ユーザーが誤ってまたは意図的にヘッダーにコードを挿入し、スパムメールを送信する可能性があります
  2. このような攻撃からシステムを保護するために、メールが送信される前に値をサニタイズして検証するカスタム関数を作成できます。

filter_var()組み込み関数を使用して、電子メール アドレスを検証およびサニタイズするカスタム関数を作成しましょう。

コード例を次に示します。

<?php 
function sanitize_my_email($field) {
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);
    if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return true;
    } else {
        return false;
    }
}
$to_email = 'name@company.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail ';
$headers = 'From: noreply@company.com';
//check if the email address is invalid $secure_check
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
    echo "Invalid input";
} else { //send email 
    mail($to_email, $subject, $message, $headers);
    echo "This email is sent using PHP Mail";
}
?>

これを個別の PHP ファイルにします (例: sendmail.php.

action次に、次のようなフォームの属性を使用して、フォーム送信時にこのファイルを使用します。

<form action="sendmail.php" method="post">
   <input type="text" value="Your Name: ">
   <input type="password" value="Set Up A Passworrd">
   <input type="submit" value="Signup">
   <input type="reset" value="Reset Form">
</form>

私が助けてくれることを願っています

于 2021-02-26T14:07:58.347 に答える