链接电子邮件地址并通过outlook发送电子邮件

时间:2013-08-21 09:33:44

标签: wpf email hyperlink

我正在开发一个wpf应用程序,我有一个客户信息部分,我可以记录我的客户信息。在本节中,我使用文本框记录客户的电子邮件地址。但现在我想制作电子邮件地址超链接并通过Outlook电子邮件链接电子邮件地址,例如,如果我点击电子邮件地址,它会自动打开Outlook电子邮件,以便我可以通过outlook发送电子邮件。欣赏样品。谢谢。

我想要的是标签或文本块,其文本是左侧的电子邮件(不需要绑定到文本框中的文本),右侧的文本框可以键入电子邮件地址。在文本框中键入有效的电子邮件地址后,您可以单击电子邮件地址,它将自动打开Outlook。在To of outlook中,电子邮件地址是您输入的内容。

<TextBlock Text="Email" Grid.Row="11" x:Name="lblEmail" VerticalAlignment="Top"/> 

<TextBox Grid.Column="1" Grid.Row="11" x:Name="txtEmail" VerticalAlignment="Top" TextDecorations="UnderLine" Foreground="Blue"
        Text="{Binding Email,UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, NotifyOnValidationError=True}">
</TextBox> 

1 个答案:

答案 0 :(得分:1)

我使用此方法发送我的电子邮件...请注意,这不是专门用于Outlook ...它将使用用户计算机上设置的默认电子邮件程序中的任何软件:

public bool SendEmail(List<string> toAddresses, List<string> ccAddresses, string fromAddress, string emailSubject, string emailBody, bool isBodyHtml)
{
    MailMessage email = new MailMessage();
    email.From = new MailAddress(fromAddress);
    foreach (string address in toAddresses) email.To.Add(new MailAddress(address));
    foreach (string address in ccAddresses) email.CC.Add(new MailAddress(address));
    email.BodyEncoding = Encoding.UTF8;
    email.IsBodyHtml = false;
    email.Subject = emailSubject;
    email.Body = emailBody;
    email.Priority = MailPriority.Low;
    SmtpClient smtpClient = new SmtpClient(Settings.Default.DefaultEmailServerPath);
    smtpClient.Credentials = new NetworkCredential(Settings.Default.EmailNetworkCredentialUserName, Settings.Default.EmailNetworkCredentialPassword, Settings.Default.EmailNetworkCredentialDomain);
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpClient.Host = Settings.Default.DefaultEmailServerPath;
    smtpClient.UseDefaultCredentials = true;
    try { smtpClient.Send(email); }
    catch { return false; }
    return true;
}

请注意,我已为此重载了方法,因此这个方法中包含所有选项...如果您愿意,可以自由删除多行。还有一种发送电子邮件的快捷方式:

System.Diagnostics.Process.Start("mailto:youremail@yourcompany.com");

基本上,我会在您的用户界面中添加HyperLink控件或Button Command,然后从您的处理程序中调用此代码。您可以在MSDN的Hyperlink class页面上找到有关HyperLink控件的更多信息,并在this post中找到一个很好的示例。

更新&gt;&gt;&gt;

你真的应该提供代码示例......我不知道你是如何设置你的TextBox,你是否有约束力,参数的名称等等。因此,我只能假设您必须与自己的代码相关。

首先,在相同的位置添加Hyperlink控件作为TextBox

<TextBox Grid.Row="0" Grid.Column="1" Name="EmailTextBox" Text="{Binding Email}" 
    Visibility="{Binding IsValidEmail, Converter={StaticResource 
    InverseBoolToVisibilityConverter}}" />
<TextBlock Grid.Row="0" Grid.Column="1">
    <Hyperlink RequestNavigate="Hyperlink_RequestNavigate">
        <TextBlock Text="{Binding Text, ElementName=EmailTextBox}" Visibility="{
    Binding IsValidEmail, Converter={StaticResource BoolToVisibilityConverter}}" />
    </Hyperlink>
</TextBlock>

您认为这里的基本想法是让两个控件共享一个UI位置,并根据TextBox的值显示“轮流”。因此,当文本值是有效的电子邮件地址时,您需要添加一个bool属性(在我的示例中为IsValidEmail),并将其设置为true。然后,BoolToVisibilityConverter会将{true}的真值转换为Visibility.Visible,而Hyperlink会将该假值转换为InverseBoolToVisibilityConverterVisibility.Collapsed对于Visibility.Hidden控件。我希望并相信你可以自己完成剩下的工作,因为我今天的时间有限。