windows[msys2]下可用的mu4e 和 mbsync / isync

还是要借助msys2编译,原repo是 https://github.com/msys2-unofficial/MSYS2-packages -其中一些

PKGBUILD里面的source过时了,我fork了一下然后修改到最新 https://github.com/pRot0ta1p/MSYS2-packages (已经merge了)

编译步骤可以参考 Installation (Mu4e 1.8.11 user manual) ,基本上都是makepkg -s然后pacman -U,编译时注意使用msys shell,不是用mingw32或者mingw64 shell

有一个坑点,编译mu的时候会安装msys emacs(就是msys2 里面那个非gui的emacs)作为依赖,然后mu4e的el文件会安装在/usr/share/emacs/site-lisp/mu4e下,mingw64的应用比如你用msys2编译的emacs是看不到这个文件夹的,需要手动复制到/mingw64/share/emacs/site-lisp/mu4e

第二个坑点是这样编译的mu4e不认window的路径,只认msys格式的路径 :rofl: ,还好有个开箱即用的解决办法: EmacsWiki: cygwin-mount.el

暂时还没整明白怎能让mbsync定时运行,还有windows上怎么弹出新邮件提醒,目前似乎 GitHub - gkowzan/alert-toast: Windows 10 toast notifications for Emacs 配合mu4e-alert应该可行。。。有没有windows上用过mbsync或者offlineimap的大佬出出主意 :thinking:

PS:

自己折腾了一个用powershell和windows task scheduler实现的方法 用一个vbs脚本调用powershell脚本去调用bash脚本( :rofl:

三个脚本文件,syncmail.vbs, syncmail.ps1, syncmail.sh假设放在同一个文件夹里面 ~/exec,msys2的bash路径假设为C:\scoop\apps\msys2\current\usr\bin\bash.exe,powershell需要安装burnttoast

syncmail.ps1:

$unread = 0
$old_unread = 0

while ($True) {
    $unread = C:\scoop\apps\msys2\current\usr\bin\bash.exe -c -l '~/exec/syncmail.sh'

    if(($unread -ge 1) -AND ($unread -ne $old_unread)) {
    New-BurntToastNotification  -Text "You have $unread new mail(s)."
    }

    $old_unread = $unread

    Start-Sleep -Seconds 300 #每300秒同步一次
}

syncmail.sh

#!/usr/bin/env bash
mbsync -a --quiet

if pgrep -f 'mu server' > /dev/null; then
    emacsclient -ue '(mu4e-update-index)'
else
    XAPIAN_CJK_NGRAM=yes mu index --quiet
fi

unread=$(mu find flag:unread AND '(maildir:/INBOX/ OR maildir:/inbox/ OR maildir:/Inbox/)' AND NOT flag:trashed 2>/dev/null | wc -l)

printf "%s" "$unread"

syncmail.vbs

CreateObject("WScript.Shell").Run "powershell -File syncmail.ps1",0

自动同步email的方法:把syncmail.vbs创建快捷方式到shell:startup文件夹(windows的“启动”文件夹),这样开机启动就会自动同步了。之前用window task manager的触发机制很迷。。实际体验各种莫名其妙停止同步。。。

发邮件的坑

msmtp似乎用不了,因为msys2编译出的 mu4e不识别window的路径格式,发信时msmtp无法正确的找到email文件位置。用emacs内置的包smtpmail可以代替。

windows task scheduler 里面action选择Start a program,然后program里面填powershell,Add a argument里面填 -File E:\home\exec\syncmail.ps1 -WindowStyle Hidden。Trigger里面选默认的one time run,然后每5分钟重复就可以了。

2 个赞

cygwin上用mu4e和offlineimap还顺利的。目前切换到msys2,mu4e搞定了,offlineimap搞不定。

估计是msys2的python的锅,,另外问下大佬是怎么做邮件提醒的?我现在尝试mu4e-alert但是怎么设置都死活不提醒 :joy:

自从msys2没搞定,就放弃mu4e了

用了两个星期了,暂时没发现有啥大问题,更新了下同步邮件的脚本。

现在在 Windows 上安装 mu4e 有更简单的方法了吗? 这么折腾实在不想去尝试啊。

为什么不用wsl呢?我现在win11,用wsl感觉还行。

Dell 的移动工作站没有配 TPM 2.0,不给升级 Win 11 :sweat:

还是老样子,,我已经转投foxmail了,支持exchange还比微软自家的东西轻量。。

那我在 Windows 上还是老实用 Outlook,不折腾 mu4e了。 打算在 Mac 用用看 Mu4e