网站上有两个预先存在的问题。 一种用于 Python,一种用于 Java。
我希望能够做几乎完全相同的事情(在 PHP 中)。我创建了一个邮件代理,两个人可以通过向一个唯一的电子邮件地址发送电子邮件来一起通信。 然而,我发现的问题是,当一个人收到电子邮件并点击回复时,我很难准确地捕获他写的文本并丢弃以前通信中引用的文本。
我正在尝试找到一种适用于 HTML 电子邮件和纯文本电子邮件的解决方案,因为我同时发送这两种电子邮件。
如果有帮助,我也有能力插入一些<*****RESPOND ABOVE HERE*******>如果需要,请在电子邮件中标记,这意味着我可以丢弃下面的所有内容。
你会推荐我做什么?总是将该标记添加到 HTML 副本和纯文本副本,然后获取其上方的所有内容?
我仍然会知道每个邮件客户端如何创建响应的场景。因为例如 Gmail 会这样做:
On Wed, Nov 2, 2011 at 10:34 AM, Message Platform <35227817-7cfa-46af-a190-390fa8d64a23@dev.example.com> wrote:
## In replies all text above this line is added to your message conversation ##
关于最佳实践的任何建议或建议?
或者我应该只获取 50 个最流行的邮件客户端,然后开始为每个客户端创建自定义正则表达式。然后对于这些客户端中的每一个,还有大量不同的区域设置,因为我猜用户的区域设置也会影响添加的内容。
或者如果它包含日期,我是否应该始终删除前面的行?..等等
最佳答案
不幸的是,如果您想仔细清理电子邮件(删除不属于实际回复电子邮件本身的所有内容),那么您将陷入痛苦的世界。 理想的方法是,正如你所建议的,为每个流行的电子邮件客户端/服务编写正则表达式,但这是一个相当荒谬的工作量,我推荐 being lazy and dumb关于它。
有趣的是,甚至 Facebook engineers遇到这个问题,Google has a patent关于“检测引用文本”的方法。
您可能会认为可以接受三种解决方案:
别管它
第一个解决方案是将所有内容都保留在消息中。大多数电子邮件客户端都这样做,似乎没有人提示。当然,如果在线消息系统(如 Facebook 的“消息”)有初始风格的回复,它们看起来很奇怪。使这项工作正常进行的一种偷偷摸摸的方法是呈现折叠的任何引用行的消息,并包含一个指向“扩展引用文本”的小链接。
将回复与旧消息分开
正如您提到的,第二种解决方案是在您的消息顶部放置一个描述性消息,例如 --------- 请在此行上方回复 -------- --,然后在处理回复时删除该行和下面的任何内容。许多系统都会这样做,这并不是世界上最糟糕的事情......但它确实让您的电子邮件看起来更加“自动化”并且不那么个人化(在我看来)。
去掉引用的文字
最后一个解决方案是简单地删除以 > 开头的任何新行,这可能是回复电子邮件中引用的行。大多数电子邮件客户端使用这种指示引用文本的方法。这是一些可以做到这一点的正则表达式(在 PHP 中):
$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi', '', $message_body);
使用这种更简单的方法存在一些问题:
>,这样您就可以去掉引号。On [date],[person] said。此行很难删除,因为它在不同的电子邮件客户端之间的格式不一样,并且它可能在您删除的引用文本上方一两行。我已经在我的 PHP Imap 中实现了这种检测方法,并取得了一定的成功。图书馆。当然,测试是关键,对于您的特定系统而言,权衡可能是值得的。 YMMV。
关于php - 获取该人刚刚写的实际电子邮件,不包括任何引用的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978987/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur