# Object - SMTP 邮件发送

## `SMTP`

声明：class

用于连接 SMTP 服务器并发送邮件的内置对象

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP 创建 生成 构造函数 实例化 new -->

下列范例使用本机 `127.0.0.1:42125` 的无认证临时 SMTP 测试服务

邮件地址使用保留的 `.test` 域名，不会投递到公网邮箱

### `create()`

声明：function

无参数构造函数。创建 SMTP 实例，连接参数由实例属性设置

<!-- tags: Object SMTP 邮件发送 创建 生成 对象 实例 邮件 POP3 IMAP -->

可见性：public

### `create(host)`

声明：function

构造函数。按 host 配置名称读取连接参数并自动连接服务器

<!-- tags: Object SMTP 邮件发送 创建 生成 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数   | 类型   | 说明                                                    |
| ------ | ------ | ------------------------------------------------------- |
| `host` | string | SMTP 配置名称。指定后从配置文件读取服务器参数并自动连接 |

### `connect()`

声明：function

连接服务器。需要设置host属性。并且不能多次connect，否则第二次之后的会报错

<!-- tags: Object SMTP 邮件发送 连接 登录 对象 实例 邮件 POP3 IMAP -->

可见性：public

返回：any

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
echo 1;
obj.disconnect();
// 输出：1
```

### `disconnect()`

声明：function

断开连接

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

返回：any

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
obj.disconnect();
echo 1;
// 输出：1
```

### `disconnectNotifyPeer()`

声明：function

断开并且通知服务器

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

返回：any

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
obj.disconnectNotifyPeer();
echo 1;
// 输出：1
```

### `expand(username)`

声明：function

展开用户名，例如用于邮件列表。需要服务器配置，暂不支持

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数       | 类型   | 说明                     |
| ---------- | ------ | ------------------------ |
| `username` | string | 字符串类型，展开的用户名 |

返回：string

### `login()`

声明：function

登录，暂不支持。但是，在设置了Username和Password属性时，使用connect()方法就包括连接服务器和登陆功能。如需验证用户名密码可使用Authenticate()方法

<!-- tags: Object SMTP 邮件发送 连接 登录 对象 实例 邮件 POP3 IMAP -->

可见性：public

返回：any

### `quickSend(a_host, a_subject, a_to, a_from, a_text)`

声明：function

创建并发送一封纯文本邮件

<!-- tags: Object SMTP 邮件发送 发送 提交 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数        | 类型   | 说明                             |
| ----------- | ------ | -------------------------------- |
| `a_host`    | string | 字符串类型，服务器主机名或者地址 |
| `a_subject` | string | 字符串类型，标题                 |
| `a_to`      | string | 接受者邮件地址                   |
| `a_from`    | string | 来源邮件地址                     |
| `a_text`    | string | 发送的邮件的内容                 |

返回：any

#### 示例

```tsl
obj := new SMTP();
obj.port := 42125;
obj.useTLS := false;
echo obj.quickSend(
    "127.0.0.1",
    "TSL quick test",
    "recipient@example.test",
    "sender@example.test",
    "test body"
), "\n";
// 输出：1
```

### `send(message)`

声明：function

发送邮件

<!-- tags: Object SMTP 邮件发送 发送 提交 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数      | 类型    | 说明                            |
| --------- | ------- | ------------------------------- |
| `message` | mailmsg | MailMsg对象，需要发送的邮件内容 |

返回：any

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
msg := new MailMsg();
msg.subject := "TSL send test";
msg.body := "test body";
msg.sender := "sender@example.test";
msg.recipients := "recipient@example.test";
echo obj.send(msg), "\n";
obj.disconnect();
// 输出：0
```

### `sendCmd(cmd, cmd_result, ret_code)`

声明：function

发送命令

<!-- tags: Object SMTP 邮件发送 发送 提交 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数         | 类型   | 说明                   |
| ------------ | ------ | ---------------------- |
| `cmd`        | string | 字符串类型，发送的命令 |
| `cmd_result` | string | 可选。返回的结果串     |
| `ret_code`   | string | 可选。返回的代码串     |

返回：boolean

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
obj.sendCmd("HELO 127.0.0.1\r\n", cmd_result, ret_code);
echo cmd_result;
obj.disconnect();
// 输出：localhost
```

### `verify(username)`

声明：function

向 SMTP 服务器查询指定邮件地址是否可接收邮件，服务器可以禁用该功能

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

| 参数       | 类型   | 说明                     |
| ---------- | ------ | ------------------------ |
| `username` | string | 字符串类型，验证的用户名 |

返回：string

#### 示例

```tsl
obj := new SMTP();
obj.host := "127.0.0.1";
obj.port := 42125;
obj.useTLS := false;
obj.connect();
echo obj.verify("recipient@example.test");
obj.disconnect();
// 输出：recipient@example.test <recipient@example.test>
```

### `Authenticate`

声明：property

服务器验证。验证用户名和密码是否能登陆smtp服务器。使用之前需要先使用connect()方法

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：boolean

访问：read/write

### `AuthType`

声明：property

认证类型，0：明文用户密码，1：MD5，2：SASL认证，-1：自定义认证

<!-- tags: Object SMTP 邮件发送 摘要 哈希 散列 digest hash 对象 实例 邮件 POP3 -->

可见性：public

类型：integer

访问：read/write

### `AuthTypeString`

声明：property

自定义认证类型，仅当 AuthType 设置为-1时有效；设置为"AUTH=*"：自动选择服务器支持的认证类型；多个用分号连接

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP AUTH -->

可见性：public

类型：string

访问：read/write

### `DidAuthenticate`

声明：property

是否已经验证。需要先执行Authenticate()方法验证

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：boolean

访问：read

### `Host`

声明：property

获取或设置主机名称或地址

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：string

访问：read/write

### `LastCmdResult`

声明：property

获取最后的命令执行结果

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：string

访问：read

### `LastCmdResultCode`

声明：property

获取最后的命令执行的返回码

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：string

访问：read

### `Password`

声明：property

获取或设置密码

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：string

访问：read/write

### `Port`

声明：property

获取或设置主机端口

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：integer

访问：read/write

### `Username`

声明：property

获取或设置用户名

<!-- tags: Object SMTP 邮件发送 获取 查询 对象 实例 邮件 POP3 IMAP -->

可见性：public

类型：string

访问：read/write

### `UseSTARTTLS`

声明：property

控制是否使用显式 TLS（即 STARTTLS 加密协议）

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP TLS STARTTLS -->

可见性：public

类型：boolean

访问：read/write

### `UseTLS`

声明：property

是否采用SSL连接。采用ssl需要设置到服务器的对应端口

<!-- tags: Object SMTP 邮件发送 对象 实例 邮件 POP3 IMAP SSL -->

可见性：public

类型：boolean

访问：read/write
