Windows中实现右键把电子书通过邮件发到kindle

不使用第三方软件,通过Windows自带的函数,可以实现右键将电子书通过电子邮件发送到kindle邮箱,从而实现kindle电子书传送功能。实现过程如下:

1. 使用bat添加右键功能

打开资源管理器,在地址中输入%APPDATA%\Microsoft\Windows\SendTo,按回车。然后在该目录,新键文件,命名为SendToKindle.bat。内容如下:

shell 复制代码
@echo off
set "PowerShellScriptPath=C:\path\to\SendToEmail.ps1"
set "EmailAccount=your_email@example.com"
set "EmailPassword=your_email_password"
set "DestinationEmail=destination_email@example.com"

powershell.exe -ExecutionPolicy Bypass -File "%PowerShellScriptPath%" "%EmailAccount%" "%EmailPassword%" "%DestinationEmail%" %*

pause

注意:最后加pause是为了能在出错失败时可以看到错误信息。

上述批处理文件中使用了一些占位符,需要根据实际情况替换它们:

  • C:\path\to\SendToEmail.ps1: 替换为您的 PowerShell 脚本文件的路径。
  • your_email@example.com: 替换为发送邮件的邮箱账号。
  • your_email_password: 替换为发送邮件的邮箱密码。
  • destination_email@example.com: 替换为目标邮箱地址。
    批处理文件将通过 PowerShell 脚本来发送邮件,并将选中的文件作为附件发送。在调用 PowerShell 脚本时,使用 %* 表示将右键菜单中选中的文件作为参数传递给 PowerShell 脚本。

使用powershell实现邮件发送功能

新建文件SendToEmail.ps1,代码如下:

powershell 复制代码
param (
    [string]$EmailAccount,
    [string]$EmailPassword,
    [string]$DestinationEmail,
    [string]$AttachmentFilePath
)

# 导入命名空间
Add-Type -AssemblyName System.Net

# 生成全局唯一的 Message-ID
function Generate-MessageID {
    return [System.Guid]::NewGuid().ToString() + "@aliyun.com"
}

# 配置发送邮件的参数
$SenderEmail = $EmailAccount
$RecipientEmail = $DestinationEmail
$Subject = (Get-Item $AttachmentFilePath).Name  # 获取文件名作为邮件主题
$Attachment = $AttachmentFilePath

# 创建邮件对象
$mailMessage = New-Object System.Net.Mail.MailMessage
$mailMessage.From = $SenderEmail
$mailMessage.To.Add($RecipientEmail)
$mailMessage.Subject = $Subject

# 添加 X-Mailer 字段
$mailMessage.Headers.Add("X-Mailer", "PowerShell Mailer")

# 手动添加 Message-ID 字段
$mailMessage.Headers.Add("Message-ID", (Generate-MessageID))

# 添加附件
if (Test-Path $Attachment) {
    $attachmentData = New-Object System.Net.Mail.Attachment($Attachment)
    $mailMessage.Attachments.Add($attachmentData)

    # 设置附件的 Content-Disposition 头信息,指定附件的显示名称
    $attachmentData.ContentDisposition.FileName = $Subject  # 替换为附件的显示名称
}

# 配置 SMTP 服务器
$smtpClient = New-Object System.Net.Mail.SmtpClient
$smtpClient.Host = "smtp.aliyun.com"  # 替换为您的 SMTP 服务器地址
$smtpClient.Port = 25  # 替换为您的 SMTP 服务器端口
$smtpClient.EnableSsl = $false
$smtpClient.Credentials = New-Object System.Net.NetworkCredential($EmailAccount, $EmailPassword)

# 发送邮件
$smtpClient.Send($mailMessage)

上面smtpClient.Host的值替换为你实际邮箱的SMTP地址,smtpClient.Port替换为对应的端口。

我在实际使用过程中,用的是阿里云的邮箱,开启Ssl的情况下,邮件一直发送失败,所以没有启用SSL。

另外,在一开始的时候,发现邮件能发送成功,但是Kindle上不显示,对比了我通过powershell发送的邮件和通过网页或客户端发送的邮件的头部信息之后,我添加了X-MailerMessage-ID,最后总算能把书籍推送到Kindle上了。我猜应该是Message-ID不可缺少的原因,但目前没有再进一步实践。

参考资料:

相关推荐
码农水水11 小时前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
沫离痕12 小时前
windows安装docker实例
windows·docker·容器
桌面运维家13 小时前
vDisk VOI架构IO瓶颈怎么办?Windows优化实战
windows·架构
非凡ghost16 小时前
MPC-QT视频播放器(基于Qt框架播放器)
开发语言·windows·qt·音视频·软件需求
ysy164806723916 小时前
Docker安装(Windows版)
windows·docker·容器
課代表18 小时前
bat 批处理中 FOR 命令的变量修饰符
脚本·bat·环境变量·批处理·路径·扩展名·短名称
珂玥c18 小时前
windows系统nfs挂载
运维·windows·ssh·remmina·cygwin
wok15719 小时前
Windows 上使用 Docker Desktop 教程
windows·docker·容器
希赛网19 小时前
网工备考,华为ENSP基础配置命令(下)
windows·计算机网络·网络工程师·华为认证·ensp·路由交换·网工备考
马踏岛国赏樱花19 小时前
Windows与Ubuntu双系统,挂载D/E盘到Ubuntu下时只能读的问题
linux·windows·ubuntu