hyperlink email address in textbox and send it via Outlook

梦想的初衷 提交于 2019-12-20 04:15:39

问题


I am working on a wpf app, and I have a Customer Information section where I can record my customer information. In this section, I use a textbox recording customer's email address. But now I want to make the email address hyperlink and link the email address via Outlook email, say, if I click the email address, it opens the outlook email automatically so that I can send email via outlook. Thanks.

What I want is a Label or Textblock whose text is Email on the left (do not need to bind to the text in the textbox), a Textbox on the right where you can type an email address. After you type a valid email address in the textbox, you can click the email address, and it will open outlook automatically. In the To field of outlook, the email address is what you typed in.(The comments are so long in last question, so I make it a new question, the old question link is link email address and send email via 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:


OK, let's have another go... first we have a TextBox that the user enters an e-mail address into:

<TextBox x:Name="EmailTextBox" />

Then we have a Hyperlink object whose NavigateUri property is data bound to the Textbox.Text field of the EmailTextBox object:

<Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="{Binding Text, 
    ElementName=EmailTextBox, UpdateSourceTrigger=PropertyChanged}">
    <TextBlock Text="Click here to e-mail" />
</Hyperlink>

Then we have the RequestNavigateEvent handler that validates the e-mail address (Regular expression was taken from this post):

public void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Hyperlink hyperlink = sender as Hyperlink;
    if (hyperlink == null) return;
    if (Regex.IsMatch(hyperlink.NavigateUri.ToString(), @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"))
    {
        string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString());
        try { System.Diagnostics.Process.Start(address); }
        catch { MessageBox.Show("That e-mail address is invalid.", "E-mail error"); }
    }
}

Now, I still haven't been able to test any of this, so you might have to fix a couple of little errors yourself, but this is the roughly what you have to do. Feel free to add comments, but lets not make the comment section bigger than the question section this time. ;)

UPDATE >>>

Ok, so the problem was that the hyperlink.NavigateUri is in fact a Uri object and not a string so we need to call ToString() on it.

Just in case you need it, you can replace the line in your Hyperlink_RequestNavigate handler with this line to set the subject of the e-mail:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject");

This can be further extended to add part (or all) of the body too:

string address = string.Concat("mailto:", hyperlink.NavigateUri.ToString(), 
"?subject=This is the subject&body=Dear Sir/Madam,");



回答2:


you can try code XAML

<TextBlock Name="tbReferAFriend"  MouseDown="tbReferAFriend_MouseDown">Refer a friend</TextBlock>

code behind

 private void tbReferAFriend_MouseDown(object sender, MouseButtonEventArgs e)
            {
                try
                {

                   LaunchEmailClientByShellExecute();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
                }
            }

    [DllImport("shell32.dll")]
            public static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation,
                string lpFile, string lpParameters, string lpDirectory, int nShowCmd);

            private void launchEmailClientByShellExecute()
            {
                ShellExecute(IntPtr.Zero, "open", "mailto:username?subject=Read%20This&body=message%20contents", "", "", 4/* sw_shownoactivate */);
            }

from : https://social.msdn.microsoft.com/Forums/vstudio/en-US/dcbaaced-97b3-4276-bf95-960e77cb6c03/how-to-launch-default-mail-client-in-wpf-applications?forum=wpf



来源:https://stackoverflow.com/questions/18378707/hyperlink-email-address-in-textbox-and-send-it-via-outlook

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!