无法使用Deno(SmtpClient模块)发送邮件

4

我刚开始学习Deno,并尝试使用它发送邮件。

import { SmtpClient } from "./deps.js";

await client.connectTLS({
  host: "smtp.163.com",
  port: 465,
  username: "my email",
  password: "my password",
});

await client.send({
  from: "mailaddress@163.com",
  to: "t32n5nr@prowerl.com",
  subject: "Mail Title",
  content: "Mail Content,maybe HTML",
});

我按照SmtpClient文档中所说的做了一切

,但是我收到了一个错误

error: Uncaught ConnectionRefused: No connection could be made because the target machine actively refused it. (os error 10061)
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendAsync ($deno$/ops/dispatch_json.ts:98:10)
    at async Object.connectTls ($deno$/tls.ts:20:15)
    at async SmtpClient.connectTLS (https://deno.land/x/smtp/smtp.ts:36:18)
    at async file:///C:/.../controller.js:28:1

你确定smtp.163.com存在并且你有正确的凭据吗? - VLAZ
请提供您的 deno --version 版本以及 ./deps.ts 文件,我在这里遇到了不同的错误。 - Evandro Pomatti
版本 - deno 1.0.2,deps.js - export { Application } from "https://deno.land/x/oak/mod.ts"; export { SmtpClient } from "https://deno.land/x/smtp/mod.ts"; - Shotiko Topchishvili
@ShotikoTopchishvili 您必须使用"163.com"作为发件人邮箱吗?请在您的终端运行以下命令:telnet smtp.163.com 465。如果显示"Connection refused",意味着该端口无法访问或已关闭。您是否受到防火墙或代理的限制?我通过Google进行了测试,并且工作正常。 - Evandro Pomatti
1个回答

1

“连接被拒绝”消息通常有以下两种可能性:

1. 服务器或服务不稳定或不可用。

在这种情况下,服务器可能发生了一些问题:

选项 1.1 - 端口错误/监听器关闭

您使用的端口是正确的,但是监听器(服务器上的进程)已关闭,这意味着您正在连接到正确的端口,但没有进程来监听您的请求。

可能的解决方案是尝试运行telnet <地址> <端口>并检查服务是否正常。例如:telnet google.com 443

选项 1.2 - 阈值限制

端口和服务都正常运行,但您已达到配置的TCP连接限制阈值。

这可能是由于对终点的高流量(峰值)引起的。这不是您可以自己解决的问题。如果流量过大,TCP监听器可能会拒绝调用者的连接。

测试这些的一种方法是实现一个负载测试脚本,以测试连接性随时间的变化。如果你证明服务器限制了请求,那么你可以报告并要求他们增加负载能力(允许更多同时请求)。

2. 客户端无法与服务器通信

选项 2.1 - 代理

如果你是从企业网络连接,并且中间有一个代理,那可能是你遇到困难的原因。

解决方案:从家里或外部网络运行你的代码,以证明你能够从公司网络之外进行连接。

选项 2.2 - 防火墙

就像代理一样,你的代码在防火墙后面运行,该防火墙可能会阻止或干扰你与外部网络的通信。


我成功运行了你的代码,并使用我的个人凭据连接到了Google。由于Deno库的类型定义问题,我不得不进行了一些微小的更改,但它运行得很好。

我强烈怀疑你的问题与基础设施(本地或远程)有关,而不是与Deno运行时或库有关。

import { SmtpClient } from "https://deno.land/x/smtp/mod.ts";
import { ConnectConfigWithAuthentication } from "https://raw.githubusercontent.com/manyuanrong/deno-smtp/master/config.ts";

const client = new SmtpClient();

const params = <ConnectConfigWithAuthentication>{
  hostname: "smtp.google.com",
  port: 465,
  username: "<google mail>",
  password: "<password>"
}

await client.connectTLS(params);

await client.send({
  from: "<from_email>", // Your Email address
  to: "<to_email>", // Email address of the destination
  subject: "Mail Title",
  content: "Mail Content,maybe HTML",
});

await client.close();

我尝试在 smtp.163.com 网站上创建一个用户,但是我无法理解这个语言,如果您给我测试凭据,我可以自己尝试。


@ShotikoTopchishvili 我需要更多的细节。你有没有防火墙、代理服务器、反病毒软件等可能导致问题的东西?你是在个人电脑和家庭互联网上运行吗? - Evandro Pomatti
现在谷歌使用oAuth2进行身份验证。这个smtp库目前不支持它。要么降低谷歌上的电子邮件设置(可能不推荐),要么切换邮件提供商。这个库与RackSpace电子邮件帐户配合得很好。您可以获得DMARC、SPF、DKIM来确保真实性,费用大约为3.99美元/月。 - suchislife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接