我使用 alpine 作为我的主要邮件阅读器。虽然我一天的大部分时间都在终端或 Emacs 上度过,但使用 notification-bin 获得新邮件的漂亮通知仍然是件好事。有什么方法可以配置 alpine 在收到新邮件时运行自定义命令吗?
答案1
alpine中有“NewMail FIFO Path”配置选项。引用帮助:
您可以让 Alpine 创建一个 FIFO 特殊文件(也称为命名管道),每当当前文件夹、收件箱或任何打开的 Stayopen 文件夹中收到新消息时,它都会发送一行消息。为了防止两个不同的 Alpine 都写入同一个 FIFO,Alpine 将仅创建 FIFO 并在其不存在时对其进行写入。
因此,我将选项设置为“/tmp/alpine.fifo”,并编写了简单的实用程序来从 FIFO 读取消息并调用“notify-send”:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define FIFO_NAME "/tmp/alpine.fifo"
int main(void)
{
char s[512];
char cmd[512];
int num;
int fd = open(FIFO_NAME, O_RDONLY);
do {
if ((num = read(fd, s, 300)) == -1)
perror("read");
else {
s[num] = '\0';
sprintf(cmd, "notify-send -t 0 'New mail:' '%s'", s);
system(cmd);
}
} while (num > 0);
return 0;
}
将其保存到 alpine-notifier.c,并使用“gcc alpine-notifier.c -o alpine-notifier”命令进行编译。 alpine 启动后启动“alpine-notifier”。享受弹出通知。
答案2
更新:
我对之前的答案并不满意,所以我对脚本进行了很多改进并做了一个github 仓库为了它。
现在您不必在启动 alpine 后启动脚本,脚本会为您处理好一切。脚本的核心大部分是相同的(我只是稍微改进了解析):
#! /bin/bash
while read L; do
n=$(($n + 1))
if [[ n -gt 3 ]]; then
name=`echo "$L" | sed 's/ \+/\t/g;s/^\(+ \)\?\([^\t]*\)\t\([^\t]*\)[\t ].*/\2/'`
subject=`echo "$L" | sed 's/ \+/\t/g;s/^\([^\t]*\)\t\(Re: \?\)\?\([^\t]*\)[\t ].*/\3/'`
box=`echo "$L" | sed 's/ \+/\t/g;s/^\([^\t]*\)\t\([^\t]*\)[\t ]\([^\t]*\).*/\3/'`
notify-send -t 10000 $iconcommand "Mail from $name" "$subject\n-\nIn your $box."
fi
done < <(cat alpine.fifo)
剩下的内容有点大,无法在这里发布,所以有兴趣的人可以在回购协议。
答案3
您不能使用专门的邮件通知工具,例如 Gnubiff、邮件通知或 kbiff 吗?
答案4
无法自定义alpine的“新邮件通知”。
文中没有提到这样的选项配置文档。
这里还有一个引用来自 Eduardo Chappa 的邮件列表:
我注意到当新邮件到达时,alpine 会通过闪烁屏幕在 gnome 终端中发出视觉警报。有什么方法可以自定义警报,例如,它可以播放声音或其他内容吗?
[..]
正如您现在可以猜到的那样,Alpine 只会发出蜂鸣声。在 Web Alpine 中,可以发送要播放的文件(到浏览器)以获取新邮件通知。 Unix、Mac 或 Windows Alpine 中没有这样的功能。
您现在的选择是:
引用我最喜欢的邮件客户端的开发人员的话:
所有的邮件客户端都很烂...
:-)