• 使用C#和Java发送邮件(转载)


    做用户注册时免不了要让用户使用邮件激活账号,这时就得用到使用程序发邮件的技术了。如下是我在项目中常用的发邮件的方法:

    【C#】

     1     using System.Net.Mail;
    2 using System.Net;
    3
    4 public class EmailEntity
    5 {
    6 private MailMessage mm;
    7
    8 /// <summary>
    9 /// 发送邮件
    10 /// </summary>
    11 public void sendMessage()
    12 {
    13
    14 //指定发件人的邮箱地址
    15 MailAddress fromAddress = new MailAddress("abc@163.com");
    16 //指定收件人的邮箱地址
    17 MailAddress toAddress = new MailAddress("efg@qq.com");
    18 //创建邮件对象
    19 mm = new MailMessage(fromAddress, toAddress);
    20 //添加一个密送的邮件地址
    21 mm.Bcc.Add(new MailAddress("xiuxiu@qq.com"));
    22 //添加一个抄送的邮件地址
    23 mm.CC.Add(new MailAddress("me@qq.com"));
    24 //指定邮件标题的编码格式
    25 mm.SubjectEncoding = Encoding.UTF8;
    26 //设置邮件标题
    27 mm.Subject = "我是标题";
    28 //指定邮件正文编码
    29 mm.BodyEncoding = Encoding.UTF8;
    30 //指定邮件正文是否text/html类型
    31 mm.IsBodyHtml = true;
    32 //设置邮件正文内容
    33 mm.Body = "<span style='color:#ff0000;font-weight:bold;'>我爱秀秀!</span>";
    34 //创建附件
    35 Attachment file = new Attachment(AppDomain.CurrentDomain.BaseDirectory+"xiuxiu.jpg");
    36 //设置附件的创建日期
    37 file.ContentDisposition.CreationDate = DateTime.Now;
    38 //设置附件的类型
    39 file.ContentType = new System.Net.Mime.ContentType("image/jpeg;charset=UTF-8");
    40 //将附件添加到邮件中
    41 mm.Attachments.Add(file);
    42
    43 //指定邮件发送服务器的地址和端口号
    44 SmtpClient sc = new SmtpClient("smtp.163.com", 25);
    45 //指定发件人的身份验证信息
    46 sc.Credentials = new NetworkCredential("abc", "123456");
    47 //sc.Send(mm);
    48 //注册异步发送事件
    49 sc.SendCompleted += new SendCompletedEventHandler(sc_SendCompleted);
    50 //开始执行异步发送邮件
    51 sc.SendAsync(mm, null);
    52 }
    53 //异步发送邮件完成时处理事件
    54 void sc_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    55 {
    56 if (mm != null)
    57 {
    58 mm.Dispose();//释放资源
    59 }
    60 if (e.Cancelled)
    61 {
    62 Console.WriteLine("用户已取消!");
    63 }
    64 else if (e.Error != null)
    65 {
    66 Console.WriteLine("发送失败,原因如下:" + e.Error.Message);
    67 }
    68 else
    69 {
    70 Console.WriteLine("发送成功!");
    71 }
    72 }
    73 }

    【Java】

      1 import java.util.Date;
    2 import java.util.Properties;
    3 import javax.mail.Authenticator;
    4 import javax.mail.PasswordAuthentication;
    5 import javax.mail.Message.RecipientType;
    6 import javax.mail.MessagingException;
    7 import javax.mail.Session;
    8 import javax.mail.Transport;
    9 import javax.mail.internet.AddressException;
    10 import javax.mail.internet.InternetAddress;
    11 import javax.mail.internet.MimeMessage;
    12 import javax.mail.internet.MimeMultipart;
    13
    14 /**
    15 * 邮件实体类,封装了有关发送 邮件的方法。
    16 * @author xxxxxx
    17 *
    18 */
    19 public class EmailEntity {
    20
    21 private MimeMessage msg;
    22
    23 /**
    24 * 初始化邮件实体
    25 *
    26 * @param fromDomin
    27 * 发件人邮件服务器域名,如:163.com、qq.com
    28 * @param userName
    29 * 发件人用户名,如:qmail、20082345
    30 * @param password
    31 * 发件人密码
    32 * @param toAddress
    33 * 收件人邮箱地址,如:200712345@qq.com
    34 */
    35 public EmailEntity(String fromDomin, String userName, String password) {
    36 Properties p = new Properties();
    37 //设置邮件发送服务器的地址
    38 p.setProperty("mail.host", "smtp." + fromDomin);
    39 //设置使用权限验证
    40 p.setProperty("mail.smtp.auth", "true");
    41 //设置用户身份验证凭据
    42 Session ses = Session.getDefaultInstance(p, new MyAuthenticator(userName, password));
    43 //ses.setDebug(true);//设置是否出现回显信息
    44 //创建邮件实体
    45 msg = new MimeMessage(ses);
    46 try {
    47 //设置发件人邮箱地址
    48 msg.setFrom(new InternetAddress(userName + "@" + fromDomin));
    49 } catch (AddressException e) {
    50 e.printStackTrace();
    51 } catch (MessagingException e) {
    52 e.printStackTrace();
    53 }
    54 }
    55
    56 /**
    57 * 发送消息
    58 *
    59 * @param title
    60 * 邮件标题
    61 * @param content
    62 * 邮件正文
    63 * @param type
    64 * 正文的类型,如:text/html、text/plain
    65 * @return
    66 */
    67 public boolean sendMessage(String toAddress, String title, String content, String type) {
    68
    69 try {
    70 //设置发件人邮箱地址
    71 msg.setRecipient(RecipientType.TO, new InternetAddress(toAddress));
    72 //设置邮件发送日期
    73 msg.setSentDate(new Date());
    74 //设置邮件标题
    75 msg.setSubject(title);
    76 //设置邮件正文
    77 msg.setContent(content, type);
    78 //开始发送邮件
    79 Transport.send(msg);
    80 return true;
    81 } catch (MessagingException ex) {
    82 ex.printStackTrace();
    83 return false;
    84 }
    85 }
    86
    87 /**
    88 * 发送带附件的邮件
    89 * @param toAddress 收件人的邮箱地址,如bob@126.com
    90 * @param title 邮件标题
    91 * @param content 邮件正文,包括附件
    92 * @param type 邮件正文的类型
    93 * @return
    94 */
    95 public boolean sendEmailWithAttachment(String toAddress, String title, MimeMultipart content, String type) {
    96 try {
    97 msg.setRecipient(RecipientType.TO, new InternetAddress(toAddress));
    98 msg.setSentDate(new Date());
    99 msg.setSubject(title);
    100 msg.setContent(content);
    101 Transport.send(msg);
    102 return true;
    103 } catch (MessagingException ex) {
    104 ex.printStackTrace();
    105 return false;
    106 }
    107 }
    108 }
    109
    110 //用户身份验证凭据类
    111 class MyAuthenticator extends Authenticator {
    112
    113 private String _userName;
    114 private String _password;
    115
    116 public MyAuthenticator(String userName,String password){
    117 this._userName = userName;
    118 this._password = password;
    119 }
    120
    121 @Override
    122 public PasswordAuthentication getPasswordAuthentication() {
    123 //返回使用了用户名和密码的身份验证凭据
    124 return new PasswordAuthentication(_userName, _password);
    125 }
    126 }

    经过测试,均测试成功!如下:

  • 相关阅读:
    python高级之操作数据库
    算法之矩阵计算斐波那契数列
    Mysql操作初级
    python高级之生成器&迭代器
    python高级之装饰器
    python高级之多进程
    python高级之多线程
    操作系统IO模型
    python高级之网络编程
    python高级之面向对象高级
  • 原文地址:https://www.cnblogs.com/ycxyyzw/p/2109845.html
Copyright © 2020-2023  润新知