在 cpanel 主机上构建 webmail 应用程序:如何绑定实际的电子邮件服务?

Posted

技术标签:

【中文标题】在 cpanel 主机上构建 webmail 应用程序:如何绑定实际的电子邮件服务?【英文标题】:Architechting webmail app on cpanel host: How do I go about tying in the actual email service? 【发布时间】:2017-07-02 01:53:54 【问题描述】:

我正在为最终用户构建一个类似于 Gmail 的 Webmail SPA。此应用程序将托管在 cPanel 共享主机(LAMP 堆栈)上。 最终用户没有 cpanel 电子邮件访问权限,否则。我的应用将成为他们访问这些电子邮件帐户的门户。

如果重要的话,我最好是具有 LAMP 经验的节点开发人员,因此我愿意接受任何广泛的建议。请注意,通常我只是使用 smtp 将事情弹回。我会直接做这个Imap吗?我只想在架构级别上知道我需要访问或寻找什么服务,也许是某个示例的方向。

也许一个线框图、一个流程图或一个可以描述我如何实现它的句子就足够了。我可以找到技术,我只需要一张路线图。

这是一个 RHEL6

$ uname -a
Linux 2.6.32-604.30.3.lve1.3.63.el6.x86_64 #1 SMP Sun Sep 27 06:34:10 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

一些问题基于我能够思考这个问题的唯一方法:

什么协议通常访问电子邮件(用户?)我会得到一些东西,可能是来自系统环境变量的内部邮件命令访问,或者可能是 PATH?我会 ping 用户列表吗?我的意思是应用程序需要什么信息才能连接到邮件服务器,我会从什么协议中获得这些信息?我认为这是我的障碍。

我想第一件事是在发布期间,它进行身份验证,身份验证之后会发生什么,什么协议,我将根据哪里/什么来做出该决定,以及之后我如何拉入电子邮件列表?我猜这只是一个 IMAP 请求。这就是我所需要的吗?例如php mail()nodemailer?

此外,我似乎无法想出合适的术语来获得任何有意义的谷歌搜索结果,我愿意接受搜索查询帮助作为替代方案,但不确定我正在寻找什么技术。

编辑:

在一些研究中,我发现了以下内容;

一些最终产生一些结果的搜索词

webmail interfacing php (或节点) webmail single page application node (或 php)

看起来这可能是节点应用程序连接到 imap 方式的一个示例

https://github.com/cozy-labs/emails/blob/master/server/imap/pool.coffee

我相信邮件工具在这里https://www.npmjs.com/package/nodeutil

如果有人能帮我正确看待这个问题,那就太好了。

【问题讨论】:

仍然是in the edit history。也许在将其添加回来时,您可以将意识流样式编辑为更深思熟虑的样式? 或者不要费心去改进它,并添加更多不正确的大小写。当然,在这一点上它是大便,但你仍然可以表现出愿意。 您是否阅读过本网站的内容和内容?编辑是我们,用户,我们试图结束这个问题过于宽泛。你可以在 Programming stack exchange site 上提问,我相信你会得到很好的答案。哦,请在评论中发布问题链接,我自己会对答案感兴趣,这是一个有趣的想法。 对不起,有些事情我认为是理所当然的,因为我多年来一直在使用堆栈。另一方面,你提到它的“有趣”,让我觉得我可能过度假设了这个将是一件常见的事情。对我自己来说,这一直是个谜,因为我从未尝试过,只是意识到我可能在过去 5 年左右完成这样的事情,并且觉得我现在几乎可以做到,但这部分直到我真正面对它,我其实想了解更多。所以谢谢你至少指出我没有问一个明显的问题。我会发布一个反向链接.. 【参考方案1】:

对此的一些答案:

自行开发,共享主机上的网络邮件、cPanel API、curlfopen 和第 3 方电子邮件应用程序 API 将是起点。

cPanel 可能不完全支持这一点,但他们确实有 api,UAPI 最有可能用于某些基本场景。 https://documentation.cpanel.net/display/SDK/UAPI+Functions+-+Email%3A%3Alist_pops

不过,Afterligic 的 WebMail Lite 包含一个看起来很有前景的解决方案,包括 PHPRESTjavascript API。 http://www.afterlogic.org/docs/webmail-lite/integration-and-development

PHP 阅读消息的示例看起来可能是这里的这个

<?php

    include_once __DIR__.'/../libraries/afterlogic/api.php';

    if (class_exists('CApi') && CApi::IsValid())
    
        // data for logging into account
        $sEmail = 'user@domain.com';
        $sPassword = 'PassWord';

        $sFolder = 'INBOX';
        $iOffset = 0;
        $iLimit = 5;

        $oCollection = null;

        try
        
            $oApiIntegratorManager = CApi::Manager('integrator');

            $oAccount = $oApiIntegratorManager->LoginToAccount($sEmail, $sPassword);
            if ($oAccount)
            
                $oApiMailManager = CApi::Manager('mail');
                $oCollection =  $oApiMailManager->getMessageList($oAccount, $sFolder, $iOffset, $iLimit);

                if ($oCollection)
                

                    echo '<b>'.$oAccount->Email.':</b><br />';
                    echo '&lt;pre&gt;';
                    echo 'Folder:   '.$sFolder."\n";
                    echo 'Count:    '.$oCollection->MessageCount."\n"; // $oCollection->MessageResultCount
                    echo 'Unread:   '.$oCollection->MessageUnseenCount."\n";
                    echo 'List:   '."\n";

                    $oCollection->ForeachList(function ($oMessage) 
                        $oFrom = $oMessage->From();
                        echo "\t".htmlentities($oMessage->Uid().') '.$oMessage->Subject().($oFrom ? ' ('.$oFrom->ToString().')' : ''))."\n";
                    );

                    echo '&lt;/pre&gt;';
                
                else
                
                    echo $oApiMailManager->GetLastErrorMessage();
                
            
            else
            
                echo $oApiIntegratorManager->GetLastErrorMessage();
            
        
        catch (Exception $oException)
        
            echo $oException->getMessage();
        
    
    else
    
        echo 'AfterLogic API isn\'t available';
    

还有一个 关于自己动手的一些其他想法: 这是一篇阐明如何查看帐户的文章,使用 php How to create an Email Account in Cpanel via PHP?

还有一个要列出 How to access list of email accounts with cPanel API?

构建一个 cpanel 类是为了提供一种创建和转发的方法,并且可能是作为解决方案开始的最佳示例。 http://sajjadhossain.com/tag/cpanel-class/ 资源来自这里,在此主题上进行了大量测试 http://www.zubrag.com/scripts/cpanel-create-email-account.php

转发电子邮件,以防万一将它们发送到另一个临时帐户 https://www.a2hosting.com/kb/cpanel/cpanel-mail-features/forwarding-incoming-e-mail-messages-to-a-script-file

然后可以选择松鼠邮件或 cpanel 支持的其他两个邮件应用程序:可能将其中一个变成门户。这是一种对松鼠邮件进行身份验证的方法,例如http://squirrelmail.org/plugins_category.php?category_id=6

【讨论】:

感谢您从我的生活、堆栈社区中吹走了 3 分,让我后悔分享知识。我可以对 OP 投一些反对票,这样我就可以删除它,它几乎是废话。

以上是关于在 cpanel 主机上构建 webmail 应用程序:如何绑定实际的电子邮件服务?的主要内容,如果未能解决你的问题,请参考以下文章

共享主机上的 Django 应用程序依赖项(Cpanel)

如何在 cPanel 上安装 etherpad-lite(共享主机)

如何在 cPanel 共享主机上上传 laravel 项目?

通过nodejs在共享cpanel主机上实现websocket服务器

扩展 cPanel 的 autoSSL 域列表

使用 nodemailer 的 Cpanel 电子邮件