时间:2014-07-08 15:58:29

标签: css vb.net email outlook-2007

有问题

<风格>标记在发送到Outlook 2007的电子邮件中似乎无法正常工作。

上下文

我使用asp.net服务器发送带有表格的电子邮件。此表具有客户输入的输入。

应该做什么

Table (From JSFiddle)
PrintScreened from JSFiddle

它做什么

Table (From Outlook 2007)
从Outlook 2007消息中打印出来。

规定

VB代码无关紧要(因为它正确发送电子邮件),问题来自mailMessage.body文本。

以下是代码:

Dim table As String
Dim mailMessage As New MailMessage()

'There are two multiline textboxes which I want to create a table from
table = "<table><thead><tr><th>Length</th><th>Force</th></tr></thead><tbody>"
For i = 0 To UBound(Split(length.Text, Environment.NewLine))
    table += "<tr><td>" & Split(length.Text, Environment.NewLine)(i) & "</td>"
    table += "<td>" & Split(force.Text, Environment.NewLine)(i) & "</td></tr>"
Next
table += "</tbody></table>"

mailMessage.Body = table & _
"<style>" & vbCrLf & _
"table {display: inline-table; border:3px solid; border-collapse:collapse;}" & vbCrLf & _
"thead {border:2px solid;}" & vbCrLf & _
"tbody {border:1px solid;}" & vbCrLf & _
"th {border:1px solid; padding:3px;}" & vbCrLf & _
"td {font-size:90%; border:1px solid; padding:3px; text-align:left;}" & vbCrLf & _
"</style>"

转换为this,但在此过程中出现问题。

https://www.campaignmonitor.com/css/开始,我使用的所有style命令都应该有效。

问题

我做错了什么?

更新1

我尝试将<style>标签放在桌子前面,它做到了这一点:

<style>[...]</style>
<table>[...]</table>

Style in front

似乎最后一个CSS命令会覆盖所有以前的命令(表3px边框被td覆盖...)

我尝试了 JRulle 命题,它给出了这个:

JRulle's proposition

如果没有找到解决方案,这两个都会起作用,但我真的希望表格边框比...样式的内边框更大。这可能吗?

更新2

遵循 JRulle的第二个命题:

不崩溃

W/o Collapse

这是预期的结果,因为我的第一行是<th>,因此样式不应为它们绘制边框。

折叠

enter image description here

这现在真的很奇怪,似乎整理功能实际上把内部边界放在了外边界......

3 个答案:

答案 0 :(得分:1)

显示的错误与表格边框有关,因此请尝试以下解决方案之一:

一:将边框值设置为内联TD属性,如下所示:

<table border="1">

二:分别设置边框css属性:

border-width: 1px;
border-color: black;
border-style: solid;

*我无法访问Outlook 2007来为您测试这些...抱歉

更新1:

根据您的反馈调整样式:

table { 
  border-width: 3px; 
  border-color: black; 
  border-style: solid; 
  border-collapse: collapse; 
}
td { 
  border-width: 1px; 
  border-color: black; 
  border-style: solid; 
}

*基本上,您需要为不同的标签设置不同的边框,然后折叠边框(与属性border =&#34; 1&#34;一起使用)

答案 1 :(得分:1)

我能够正确绘制表格边框的唯一方法是使用border-left border-bottom等对每个边框进行硬编码。

最后的代码(使用内联样式)是这样的:

table = "<table style=""border: 3px solid; border-collapse: collapse; padding: 3px;"">" & _ 
    "<thead><tr><th style=""border-right: 1px solid;"">Length</th><th>Force</th></tr></thead><tbody>"
For i = 0 To UBound(Split(length.Text, Environment.NewLine))
    If i = 0 Then
        borderTop = "2px"
    Else 'i > 0 then
        borderTop = "1px"
    End If
    table += "<tr><td style=""border-right: 1px solid; border-top: " & borderTop & _ 
        " solid;"">" & Split(length.Text, Environment.NewLine)(i) & "</td>"
    table += "<td style=""border-top: " & borderTop & " solid;"">" & _ 
        Split(force.Text, Environment.NewLine)(i) & "</td></tr>"
Next
table += "</tbody></table>"

mailMessage.Body = table

答案 2 :(得分:0)

您无法在电子邮件中使用样式标记。您只能使用内联样式,这意味着直接将样式硬编码到HTML中。不幸的是,这些天仍然如此!

Read more here.