ruby-on-rails 为什么 *_url在mso条件下会破坏按钮?

von4xj4u  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(79)

我有一个rails项目,需要发送一些电子邮件,在电子邮件中有一个链接/按钮。在基于Web的电子邮件客户端和我的手机上,它显示正确,但在桌面上的Outlook中,它显示的是代码而不是按钮。

/[if mso] <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="#{crm_tasks_url}" style="height:62px;width:271px;v-text-anchor:middle;" arcsize="57%" stroke="false" fillcolor="#dc0030"><w:anchorlock/><v:textbox inset="0px,0px,0px,0px"><center style="color:#ffffff; font-family:Arial, sans-serif; font-size:16px">
%a{:href => "#{crm_tasks_url}", :style => "text-decoration:none;display:inline-block;color:#ffffff;background-color:#dc0030;border-radius:35px;width:auto;border-top:0px solid transparent;font-weight:undefined;border-right:0px solid transparent;border-bottom:0px solid transparent;border-left:0px solid transparent;padding-top:15px;padding-bottom:15px;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:16px;text-align:center;mso-border-alt:none;word-break:keep-all;", :target => "_blank"}
  %span{:style => "padding-left:30px;padding-right:30px;font-size:15px;display:inline-block;letter-spacing:normal;"}
    %span{:style => "margin: 0; word-break: break-word; line-height: 30px;"}
      %strong BEKIJK TAAK
/[if mso] </center></v:textbox></v:roundrect>

上面的代码在outlook中给出了以下结果:
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="http://localhost:3000/crm/taken" style="height:62px;width:271px;v-text-anchor:middle;" arcsize="57%" stroke="false" fillcolor="#dc0030"><w:anchorlock/><v:textbox inset="0px,0px,0px,0px"><center style="color:#ffffff; font-family:Arial, sans-serif; font-size:16px"> BEKIJK TAAK
如果我将/[if mso]块中的href更改为:http://localhost:3000/crm/taken它按预期工作并显示按钮。
现在你会说:你已经有解决办法了,但是不行。我还收到了一封邀请邮件,它发送了一个invitation_token,而且不可能对该token进行硬编码。
我正在使用Rails 7,我也有一个Rails 6的项目,它也可以发送带有链接/按钮的电子邮件,并且工作正常。我复制了完整的电子邮件视图,但仍然有问题。我不知道这是否与Rails版本有关。

csbfibhn

csbfibhn1#

不确定Rails的bug,但有一种替代方法可以将href从VML中删除,值得一试:

<!--[if mso]>
            <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" style="height:62px;width:271px;v-text-anchor:middle;" arcsize="57%" stroke="false" fillcolor="#dc0030" alt="" role="presentation">
            <w:anchorlock/>
            <center>
            <![endif]-->
            <a href="https://www.google.com" style="background-color:#dc0030;border-radius:25px;color:#ffffff;display:inline-block;font-size:16px; line-height: 50px;font-weight: bold;text-align:center;text-decoration:none;width:200px;-webkit-text-size-adjust:none;" class="buttonlink">
                Button Text
            </a>
            <!--[if mso]>
            </center>
            </v:roundrect>
        <![endif]-->

这一点风险也较小,因为您不必尝试并记住在两个地方更新URL。

相关问题