Fearure:
- 增加收件箱功能(有BUG) - 增加已发送|草稿箱|发送历史 本地记录
This commit is contained in:
201
onboarding.go
Normal file
201
onboarding.go
Normal file
@@ -0,0 +1,201 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"charm.land/huh/v2"
|
||||
)
|
||||
|
||||
var encryptionOptions = []huh.Option[string]{
|
||||
huh.NewOption("STARTTLS", "starttls"),
|
||||
huh.NewOption("SSL/TLS", "ssl"),
|
||||
huh.NewOption("None", "none"),
|
||||
}
|
||||
|
||||
func getEncryptionFromOption(option string) string {
|
||||
switch option {
|
||||
case "ssl":
|
||||
return "ssl"
|
||||
case "none":
|
||||
return "none"
|
||||
default:
|
||||
return "starttls"
|
||||
}
|
||||
}
|
||||
|
||||
func runOnboarding() error {
|
||||
var accountName string
|
||||
var email string
|
||||
var provider string
|
||||
var smtpHost string
|
||||
var smtpPort string
|
||||
var imapHost string
|
||||
var imapPort string
|
||||
var smtpUsername string
|
||||
var smtpPassword string
|
||||
var smtpEncryption string
|
||||
var smtpInsecure bool
|
||||
var unsafeHTML bool
|
||||
|
||||
form := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewNote().
|
||||
Title("欢迎使用 Pop").
|
||||
Description("让我们先配置一下邮件账户。"),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewInput().
|
||||
Title("邮箱地址").
|
||||
Value(&email),
|
||||
huh.NewInput().
|
||||
Title("账户名称 (可选)").
|
||||
Value(&accountName),
|
||||
),
|
||||
)
|
||||
|
||||
err := form.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
provider = getProviderName(email)
|
||||
hasDefaults := false
|
||||
if defaults, ok := providerDefaults[provider]; ok {
|
||||
hasDefaults = true
|
||||
smtpHost = defaults.SMTPHost
|
||||
smtpPort = fmt.Sprintf("%d", defaults.SMTPPort)
|
||||
imapHost = defaults.IMAPHost
|
||||
imapPort = fmt.Sprintf("%d", defaults.IMAPPort)
|
||||
smtpEncryption = defaults.SMTPEncryption
|
||||
}
|
||||
|
||||
if !hasDefaults {
|
||||
provider = "custom"
|
||||
}
|
||||
|
||||
var form2 *huh.Form
|
||||
if hasDefaults {
|
||||
form2 = huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewNote().
|
||||
Title("已识别: "+provider).
|
||||
Description(fmt.Sprintf("SMTP: %s:%s | IMAP: %s:%s", smtpHost, smtpPort, imapHost, imapPort)),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewConfirm().
|
||||
Title("使用默认配置?").
|
||||
Affirmative("是").
|
||||
Negative("否, 手动配置").
|
||||
Value(&hasDefaults),
|
||||
),
|
||||
)
|
||||
} else {
|
||||
form2 = huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewNote().
|
||||
Title("未知邮箱服务商").
|
||||
Description("请手动配置服务器地址。"),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewInput().
|
||||
Title("IMAP 服务器").
|
||||
Value(&imapHost),
|
||||
huh.NewInput().
|
||||
Title("IMAP 端口").
|
||||
Value(&imapPort),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewInput().
|
||||
Title("SMTP 服务器").
|
||||
Value(&smtpHost),
|
||||
huh.NewInput().
|
||||
Title("SMTP 端口").
|
||||
Value(&smtpPort),
|
||||
huh.NewSelect[string]().
|
||||
Title("加密方式").
|
||||
Options(encryptionOptions...).
|
||||
Value(&smtpEncryption),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
err = form2.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
form3 := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewInput().
|
||||
Title("用户名").
|
||||
Value(&smtpUsername),
|
||||
huh.NewInput().
|
||||
Title("密码/授权码").
|
||||
Password(true).
|
||||
Value(&smtpPassword),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewConfirm().
|
||||
Title("跳过 TLS 验证?").
|
||||
Affirmative("是").
|
||||
Negative("否").
|
||||
Value(&smtpInsecure),
|
||||
),
|
||||
huh.NewGroup(
|
||||
huh.NewConfirm().
|
||||
Title("启用 unsafe HTML?").
|
||||
Affirmative("是").
|
||||
Negative("否").
|
||||
Value(&unsafeHTML),
|
||||
),
|
||||
)
|
||||
|
||||
err = form3.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cfg := Config{
|
||||
From: email,
|
||||
Signature: "",
|
||||
UnsafeHTML: unsafeHTML,
|
||||
Accounts: []Account{
|
||||
{
|
||||
Name: accountName,
|
||||
Email: email,
|
||||
Provider: provider,
|
||||
Username: smtpUsername,
|
||||
Password: smtpPassword,
|
||||
SMTPEncryption: smtpEncryption,
|
||||
IMAP: IMAPConfig{
|
||||
Host: imapHost,
|
||||
Password: smtpPassword,
|
||||
},
|
||||
SMTP: SMTPConfig{
|
||||
Host: smtpHost,
|
||||
Username: smtpUsername,
|
||||
Password: smtpPassword,
|
||||
InsecureSkipVerify: smtpInsecure,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if imapPort != "" {
|
||||
fmt.Sscanf(imapPort, "%d", &cfg.Accounts[0].IMAP.Port)
|
||||
}
|
||||
if smtpPort != "" {
|
||||
fmt.Sscanf(smtpPort, "%d", &cfg.Accounts[0].SMTP.Port)
|
||||
}
|
||||
if smtpEncryption == "" {
|
||||
cfg.Accounts[0].SMTP.Encryption = "starttls"
|
||||
} else {
|
||||
cfg.Accounts[0].SMTP.Encryption = getEncryptionFromOption(smtpEncryption)
|
||||
}
|
||||
|
||||
if cfg.Accounts[0].Name == "" {
|
||||
cfg.Accounts[0].Name = provider
|
||||
}
|
||||
|
||||
return saveConfig(cfg)
|
||||
}
|
||||
Reference in New Issue
Block a user