在字符串中包含引号,但不包含转义字符

时间:2015-02-26 11:24:05

标签: c#

我刚刚发布过(相关但不是同一个问题)。

所以我在我使用的应用程序中处理c#中的电子邮件按钮,我目前正在尝试将多个电子邮件地址传递到mailMsg.To.Add(emailAddress)。

emailAddress中的字符串将是以;分隔的电子邮件地址。 mailMsg.To.Add方法采用电子邮件地址,格式为" email@test.co.uk" +" email2@test.co.uk"。我设法在开始和结束时分割并加入了带引号的电子邮件地址,但在地址之间,我似乎无法获得" +"在那里(制作" email@test.co.uk" +" email2@test.co.uk")。

每当我尝试在string.Join中包含引号时,它总是包含转义字符。

string strQuote = ;

        string[] emails = SessionEmail.Split(';');
        gblTeacherEmail = string.Join((strQuote + " + " + strQuote),emails);

所以在strQuote中,我已经尝试了@"""&#34 ;;但这给了"在电子邮件地址的末尾。我也试过" \"&#34 ;;但这会得到相同的结果。

我确定我做错了什么。

编辑:我将包含一个示例。

所以如果SessionEmail =" email1@test.co.uk; email2@test.co.uk" ;; string strQuote = @"""&#34 ;; 然后 string [] emails = SessionEmail.Split(&#39 ;;'); gblEmails = string.Join((strQuote +" +" strQuote),电子邮件);

这将输出为 SessionEmail =" email1@test.co.uk \" + \" email2@test.co.uk" ;;

如果strQuote =" \"";

,也会发生同样的情况

3 个答案:

答案 0 :(得分:2)

如果您使用的是System.Net.Mail.MailMessage类,并且只想在To方法中添加多个电子邮件地址,则需要使用以下格式传递它们:

“EMAIL1 @ test.co.uk,EMAIL2 @ test.co.uk”

因此,在您的具体情况下,您只需要替换“;”用“,”

检查MailAddressCollection

答案 1 :(得分:1)

虽然接受的解决方案有效(使用逗号分隔电子邮件地址),但我认为这不是将许多收件人添加到电子邮件中的“正确方法”。如果您检查RFC 5321RFC 5322,您会看到,虽然逗号不在电子邮件地址的本地部分的受支持字符列表中,但如果本地部分是引用的,则允许字符串...所以虽然不推荐(即使是RFC),但"My,Email"@myhost.com是完全合法的电子邮件地址,并且会破坏解决方案。

所以“正确的方法”是将每个收件人添加到To集合中(通过字符串或MailAddress个实例)。

所以在你的情况下,如果绝对需要源输入是一个以分号分隔的字符串(这也是一个坏主意),我会做类似的事情:

var emails = SessionEmail.Split(';').Select(x => new MailAddress(x));
mailMsg.To.AddRange(emails);

这可能是“超过顶部”,因为如果任何人都有引用逗号电子邮件地址,他应该让任何邮件客户端崩溃,但只是为了“正确”。我自己甚至为多个电子邮件地址实现了以分号分隔的字符串,但我知道这不是“正确”的方式。

答案 2 :(得分:0)

我相信您使用的是mailMessage.To.Add()方法的弃用版本。请参阅:System.Net.Mail and multiple TO recipients

我知道问题是如何在那里获取引号,但显然意图是发送给多个收件人。为此,您应将每个电子邮件地址添加为MailAddress的实例。这将使用当前方法,而不是不应使用的原始弃用方法。