我可以使用HTML5发送客户端电子邮件吗?

时间:2011-03-29 02:54:07

标签: javascript email html5 client-side

我想用HTML5发送电子邮件。我不想强迫用户打开邮件客户端,我想直接从网页发送电子邮件。

另外,在JavaScript中有什么办法可以做到这一点吗?我知道这可能是不可能的,只是想知道是否有任何狡猾的方法可以完全通过客户端。

6 个答案:

答案 0 :(得分:13)

简而言之,不是直接来自客户(不包括黑客)。

您可以对服务器进行ajax调用并发送电子邮件。

从客户端执行此操作而不使用邮件客户端的问题很复杂。例如,大多数消费者ISP都有自己的SMTP中继,必须传输端口25上的所有出站邮件。您的网站无法获得正确的信息来执行此操作。其次,webbrowser不理解SMTP协议,也不理解XMLHttpRequest对象。

因此,如果您是黑客忍者,也许您可​​以使用ActiveX,Java Applet或Flash来解决问题,但您基本上必须使用tcp套接字直接操作并在该套接字上发出SMTP协议命令。

要克服许多障碍,事实上我不知道该怎么做,但哪里有可能会有办法。不要惊讶的是,如果你发现黑客攻击,它可能会被主要的浏览器供应商迅速插入。

答案 1 :(得分:8)

是的,这是可能的。但不实用**见编辑2

一些HTML5实现包括对websockets的支持,实质上是与服务器的tcp连接。覆盖一些send / recv代码,您可以构建一个SMTP客户端。

事实上,似乎已经使用了nodejs和websocket支持来实现smtp客户端... see here ...

您仍然需要一个smtp服务器,用户名,密码等,就像标准的smtp客户端一样,以便它可以工作。

使用此方法进行垃圾邮件不太可能,因为您的smtp提供商可以轻松取消您的帐户。

===编辑===

实际上,你可以构建一个服务器较少的版本,它还必须实现名称服务器查找以查找mx记录。但是,任何体面的SMTP服务器都可能维护垃圾邮件列表黑名单表,并且从随机IP地址连接会看到通常标记为垃圾邮件的电子邮件。

与需要安全邮件连接的smtp服务器交谈也很困难。

正如其他人所提到的,这种实现有恶意用途,比如发送垃圾邮件。我想你有可能成为一个HTML5僵尸网络创建者,但我想你已经知道了大部分内容:)

===编辑2 ===

正如Mark At Ramp51所述,websockets需要握手。这是我不知道的事情。您必须破解websocket实现以绕过握手。

正确的方法是让网络服务器转发电子邮件。

答案 2 :(得分:2)

这是不可能的。

相反,您应该使用AJAX在服务器上发送电子邮件。

答案 3 :(得分:1)

您无法单独使用JavaScript发送电子邮件。您需要某种形式的服务器端处理(PHP,ASP等)来发送实际的电子邮件。

这里有一个关于设置ajax表单的好教程: http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

它不包括用于发送电子邮件的PHP(或ASP等),但是有很多关于如何使用PHP发送电子邮件的教程。

答案 4 :(得分:1)

Send email directly from Javascript

来自官方资源:

  

它是如何运作的?

  1. 连接您的电子邮件服务 从各种电子邮件服务中进行选择。我们都支持 交易电子邮件服务(Mailgun,Mailjet,Mandrill,SendGrid,Amazon SES和Postmark)和个人电子邮件服务(AOL,Gmail,FastMail,iCloud,Mail.ru,Outlook,Yahoo,Yandex和Zoho)。

  2. 创建电子邮件模板 从我们的模板设计列表中选择,或轻松构建自己的模板设计。 模板是参数化的,因此您可以通过Javascript进一步自定义它们。

  3. 使用我们的Javascript API发送电子邮件 添加我们的Javscript SDK,然后开始发送电子邮件!

  4. 以下是典型的通话:

    var service_id = 'my_mandrill';
    var template_id = 'feedback';
    var template_params = {
      name: 'John',
      reply_email: 'john@doe.com',
      message: 'This is awesome!'
    };
    
    emailjs.send(service_id,template_id,template_params);
    

    所有现有API都需要使用密钥,您显然不希望在前端代码中共享密钥。指定的服务通过仅允许发送预定义模板来克服这一点,因此对于“与朋友共享”功能,您将创建一个名为“共享”的模板。

答案 5 :(得分:0)

你不能完全通过客户端代码来完成。

您可以使用服务器回调AJAX。