精华内容
下载资源
问答
  • C#邮件发送 批量发送邮件 发送邮件嵌入图片 添加附件

    一、邮件发送

    public void Send()
            {
            	 MailMessage mail = new MailMessage();
            	  try
                {
                	 //设置邮件的标题
                	 mail.Subject ="悠哉WebService报告";
                	 mail.SubjectEncoding = System.Text.Encoding.UTF8;
                	   //设置邮件的发件人
                	    string SendEmail = ConfigurationManager.AppSettings["SendEmail"].ToString();
                	     MailAddress Addressfrom = new MailAddress(SendEmail, "uzai", System.Text.Encoding.UTF8); //邮件的发件人
                	    mail.From = Addressfrom;
                	      /*  这里这样写是因为可能发给多个联系人,每个地址用 , 号隔开
                         */
                         List<string> mailAddress = new List<string>();
                    foreach (string address in mailAddress)
                    {
                        if (address != string.Empty)
                        {
                            mail.To.Add(new MailAddress(address, address, System.Text.Encoding.UTF8));
                        }
                    }
                      //设置邮件的内容
                    mail.Body = mailContent;
                     //设置邮件的格式
                    mail.BodyEncoding = System.Text.Encoding.UTF8;
                     //mail.IsBodyHtml = true;
                       //设置邮件的发送级别
                    mail.Priority = MailPriority.Normal;
                    //发送通知
                       mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                         SmtpClient client = new SmtpClient();
                            //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                             client.Host = "smtp.gmail.com";
                              client.Port = 25;
                               client.Timeout = 9999;
                                 client.UseDefaultCredentials = true;
                    client.EnableSsl = true;
                     //邮箱登陆名和密码
                    string EmailLogName = ConfigurationManager.AppSettings["EmailLogName"].ToString();
                    string EmailLogPwd = ConfigurationManager.AppSettings["EmailLogPwd"].ToString();
                    client.Credentials = new System.Net.NetworkCredential(EmailLogName, EmailLogPwd);
                      client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        //发送email
                    client.Send(mail);
                     }
                catch (Exception)
                {
                	  //当邮件发送失败,发送异常时 使用备用方法调用备用邮箱发送
                    SendBackUp();
                     }
                finally
                {
                    mail.Dispose();
                }
            }
            public void SendBackUp()
            {
            	 MailMessage mail = new MailMessage();
            	  try
                {
                	 //设置邮件的标题
                	 mail.Subject ="悠哉WebService报告";
                	 mail.SubjectEncoding = System.Text.Encoding.UTF8;
                	   //设置邮件的发件人
                	    string SendEmail = ConfigurationManager.AppSettings["SendEmail"].ToString();
                	     MailAddress Addressfrom = new MailAddress(SendEmail, "uzai", System.Text.Encoding.UTF8); //邮件的发件人
                	    mail.From = Addressfrom;
                	      /*  这里这样写是因为可能发给多个联系人,每个地址用 , 号隔开
                         */
                         List<string> mailAddress = new List<string>();
                    foreach (string address in mailAddress)
                    {
                        if (address != string.Empty)
                        {
                            mail.To.Add(new MailAddress(address, address, System.Text.Encoding.UTF8));
                        }
                    }
                      //设置邮件的内容
                    mail.Body = mailContent;
                     //设置邮件的格式
                    mail.BodyEncoding = System.Text.Encoding.UTF8;
                     //mail.IsBodyHtml = true;
                       //设置邮件的发送级别
                    mail.Priority = MailPriority.Normal;
                    //发送通知
                       mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                         SmtpClient client = new SmtpClient();
                            //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                             client.Host = "smtp.gmail.com";
                              client.Port = 25;
                               client.Timeout = 9999;
                                 client.UseDefaultCredentials = true;
                    client.EnableSsl = true;
                     //邮箱登陆名和密码
                    string EmailLogName = ConfigurationManager.AppSettings["EmailLogName"].ToString();
                    string EmailLogPwd = ConfigurationManager.AppSettings["EmailLogPwd"].ToString();
                    client.Credentials = new System.Net.NetworkCredential(EmailLogName, EmailLogPwd);
                      client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        //发送email
                    client.Send(mail);
                     }
                catch (Exception)
                {
                	  //当邮件发送失败,发送异常时 使用备用方法调用备用邮箱发送
                    Send();
                     }
                finally
                {
                    mail.Dispose();
                }
            }

    二、发送邮件图片,附件

         我们在发送邮件时,一般图片都是用网络路径,但有时如果接收方不可直接访问外网,就不能看到图片了,比如公司内部邮件,跟外界就没法交流图片。

         那么我们就来把图片嵌入邮件中;查看人就没有限制了。

         ①、以linked的方式,此方式在邮件中不会出现图片的附件

         邮件内容调用图片格式为:<img src=\"cid:Email001\">
         发送邮件的服务端代码为:

     System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();      
        mailMessage.From="发送者邮箱";      
        mailMessage.To.Add("收件人邮件列表");      
        mailMessage.CC.Add("抄送人邮件列表");      
        mailMessage.Subject = subject;      
        AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(content,null,"text/html");      
        LinkedResource lrImage = new LinkedResource("a.jpg","image/gif");      
        lrImage.ContentId = "Email001";      
        htmlBody.LinkedResources.Add(lrImage);      
        mailMessage.AlternateViews.Add(htmlBody);      
        SmtpClient.Send(mailMessage);     
    
     SmtpClient smtp = new SmtpClient();   
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;   
                smtp.Host = "smtp.163.com";   
                smtp.Credentials = new NetworkCredential("renzhijie1111", "**");   
      
                MailMessage mm = new MailMessage();   
                mm.From = new MailAddress("test@163.com", "test");   
                mm.To.Add("test2@163.com");   
      
                mm.Subject = "测试图片邮件";   
      
                string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";   
                mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));   
      
                HTML格式邮件的内容   
                string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";   
                htmlBodyContent += "<a href=\"http://www.fenbi360.net粉笔编程网</a> <img src=\"cid:weblogo\">";   //注意此处嵌入的图片资源   
                AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");   
      
                  
                LinkedResource lrImage = new LinkedResource(@"d:\1.jpg", "image/gif");   
                lrImage.ContentId = "weblogo"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片   
                htmlBody.LinkedResources.Add(lrImage);   
      
                mm.AlternateViews.Add(htmlBody);   
      
                要求回执的标志   
                mm.Headers.Add("Disposition-Notification-To", "test@163.com");   
      
                自定义邮件头   
                mm.Headers.Add("X-Website", "http://www.fenbi360.net");   
      
                针对 LOTUS DOMINO SERVER,插入回执头   
                mm.Headers.Add("ReturnReceipt", "1");   
      
                mm.Priority = MailPriority.Normal; //优先级   
                mm.ReplyTo = new MailAddress("test2@163.com", "我自己");   
      
                如果发送失败,SMTP 服务器将发送 失败邮件告诉我   
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;   
      
                异步发送完成时的处理事件   
                smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);   
      
                开始异步发送   
                smtp.SendAsync(mm, null);   
      
      
      
      
      
    void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)   
            {   
                if (e.Cancelled)   
                {   
                    MessageBox.Show("发送被取消");   
                }   
                else  
                {   
                    if (e.Error == null)   
                    {   
                        MessageBox.Show("发送成功");   
                    }   
                    else  
                    {   
                        MessageBox.Show("发送失败: " + e.Error.Message);   
                    }   
                }   
            }   

    ②、以邮件附件的方式,此方式图片当附件发送,并会显示在邮件内容中。

     string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";      
        htmlBodyContent += "<a href=\"testimg\"></a> <img src=\"cid:webimg\">";   //注意此处嵌入的图片资源      
                 
        System.Net.Mail.Attachment att = new Attachment(@"E:\ttt.gif");      
        att.ContentId = "webimg";    


      

    展开全文
  • Android仿微信发送语音消息动态提示,支持上滑取消发送 先来几张图说明一下,简单直接: 是不是看了图片就秒懂 了。 下面来分析代码实现,直接撸代码。 主页面 AudioSendActivity.java package ...

    Android仿微信发送语音消息动态提示,支持上滑取消发送

    先来几张图说明一下,简单直接:
    发送语音的动态提示1
    发送语音的动态提示2
    这里写图片描述


    是不是看了图片就秒懂 了。
    下面来分析代码实现,直接撸代码。
    主页面 AudioSendActivity.java

    package com.example.main;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.graphics.Color;
    import android.graphics.drawable.AnimationDrawable;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.example.test.R;
    
    public class AudioSendActivity extends Activity implements OnTouchListener{
        private AlertDialog mAudioDialog;
        private TextView mAudioNotify;
        private ImageView mVoiceState;
        private TextView mAudioSend;
        private boolean mCancelSend;
        private final String TAG = "AudioSendActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_audiosend);
            mAudioSend = (TextView) findViewById(R.id.audio_send);
            mAudioSend.setOnTouchListener(this);
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (v.getId() == R.id.audio_send) {
                float startY = 0;
                float endY = 0;
                boolean send = false;
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startY = event.getY();
                    Log.d(TAG, "audioButtonDown() MotionEvent.ACTION_DOWN");
                    showAudioDialog();
                    break;
                case MotionEvent.ACTION_UP:
                    endY = event.getY();
                    hideAudioDialog();
                    send = true;
                    break;
                case MotionEvent.ACTION_MOVE:
                    float moveY = event.getY();
                    int instance = (int) Math.abs((moveY - startY));
                    Log.d(TAG, "--action move--instance:"+instance);
                    if (instance > 100) {
                        changeAudioDialogCancel(true);
                    } else {
                        changeAudioDialogCancel(false);
                    }
                    break;
                default:
                    break;
                }
    
                return true;
            }
            return false;
        }
    
    
        public void showAudioDialog() {
            if (mAudioDialog == null) {
                mAudioDialog = new AlertDialog.Builder(this).create();
                mAudioDialog.show();
                mAudioDialog.getWindow().setContentView(R.layout.audio_dialog);
                mAudioDialog.getWindow().setGravity(Gravity.CENTER);
                mAudioNotify = (TextView) mAudioDialog
                        .findViewById(R.id.audio_nofity);
                mVoiceState = (ImageView) mAudioDialog
                        .findViewById(R.id.voice_state);
    
            } else if (!mAudioDialog.isShowing()) {
                mAudioDialog.show();
            }
            mVoiceState.setImageResource(R.drawable.message_audio);
            AnimationDrawable drawable = (AnimationDrawable) mVoiceState
                    .getDrawable();
            drawable.start();
        }
    
        private void hideAudioDialog() {
            if (mAudioDialog != null && mAudioDialog.isShowing()) {
                mAudioDialog.dismiss();
            }
        }
    
    
        private void changeAudioDialogCancel(boolean cancel) {
            if (mCancelSend == cancel)
                return;
            if (mAudioDialog != null && mAudioDialog.isShowing()
                    && mAudioNotify != null) {
                if (cancel) {
                    mVoiceState.setImageResource(R.drawable.message_voice_quit);
                    mAudioNotify.setTextColor(Color.RED);
                    mAudioNotify.setText(R.string.fingers);
                } else {
                    mAudioNotify.setTextColor(Color.WHITE);
                    mAudioNotify.setText(R.string.fingers_slide_to);
                    mVoiceState.setImageResource(R.drawable.message_audio);
                    AnimationDrawable drawable = (AnimationDrawable) mVoiceState
                            .getDrawable();
                    drawable.start();
                }
            }
            mCancelSend = cancel;
        }
    }
    

    主页面布局activity_audiosend.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:layout_gravity="center">
    
    
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/green"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="200px"
            android:padding="20px"
    
            android:id="@+id/audio_send"
            android:gravity="center"
            android:text="按住 发送"/>
    
    </RelativeLayout>
    

    Dialog对话框布局audio_dialog.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:layout_gravity="center_horizontal"
        android:background="@drawable/pop_bg">
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" 
            android:layout_gravity="center_horizontal">
    
            <ImageView 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:id="@+id/voice_state"
                android:src="@drawable/message_audio"/>
    
        </LinearLayout>
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/fingers_slide_to"
            android:textColor="@color/white"
            android:id="@+id/audio_nofity"/>
    
    </LinearLayout>

    voiceState讲话动画message_audio.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false" >
    
        <item
            android:drawable="@drawable/message_voice_1"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_2"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_3"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_4"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_5"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_6"
            android:duration="200"/>
        <item
            android:drawable="@drawable/message_voice_7"
            android:duration="200"/>
    
    </animation-list>

    代码就这么多,是不是很简单啊,哈哈,喜欢请点个赞,谢谢!

    展开全文
  • 中山大学数据科学与...好友聊天发送图片功能 三、实验结果 1.SDWebImage获取图片 首先利用cocoapod安装第三方工具SDWebImage 运行命令即可 pod install 在所需要的文件中import相关的库文件 #import "UIImage...

    中山大学数据科学与计算机学院本科生实验报告

    (2019年春季学期)


    一、实验题目

    IM聊天工具

    二、实现内容

    • 使用SDWebImage获取网络图片
    • 好友聊天发送图片功能

    三、实验结果

    1.SDWebImage获取图片

    首先利用cocoapod安装第三方工具SDWebImage

    Snip20190601_3

    运行命令即可

    pod install
    

    在所需要的文件中import相关的库文件

    #import "UIImageView+WebCache.h"
    
    简单的使用方法
    // 根据url来加载imageView 图片缓存
    [self.image sd_setImageWithURL:imageUrl];
    

    其中image是UIImageView类型

    其中imageUrl是NSURL类型,注意不是NSString,需要转换

    [NSURL URLWithString:imagePath]
    
    添加完成后的函数
    // 这里需要使用block 可以在图片加载完成之后做些事情
    [self.image2 sd_setImageWithURL:imagePath2 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
            NSLog(@"这里可以在图片加载完成之后做些事情");
        }];
    
    添加默认图片

    一是可以等待图片从云端加载回来再改变,二是避免网络访问错误的时候图片加载为空的情况。

    // 给一张默认图片,先使用默认图片,当图片加载完成后再替换
    [self.image1 sd_setImageWithURL:imagePath1 placeholderImage:[UIImage imageNamed:@"default"]];
    
    具体使用例子

    需求:IM聊天工具在用户登陆后会去服务器请求用户的信息,其中就包括用户的头像信息。我们的IM服务器会返回头像图片的url,这时需要客户端在加载的时候更新头像显示图片。

    获取图片的url

    // 获取用户的信息
    -(void) getInfo{
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      NSString *url = [URLHelper getURLwithPath:@"/account/info"];
      [manager GET:url parameters:nil progress:nil
       success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
         NSLog(@"getInfo success");
         self.loginUser = [[UserModel alloc] initWithProperties:responseObject[@"data"][@"Username"]
                           NickName:responseObject[@"data"][@"Nickname"]
                           RemarkName:responseObject[@"data"][@"Username"]
                           Gender:responseObject[@"data"][@"Gender"]
                           Birthplace:responseObject[@"data"][@"Region"]
                           // 这里就是头像的url
                           ProfilePicture:responseObject[@"data"][@"Avatar"]];
         NSLog(responseObject[@"data"][@"Avatar"]);
         [[DatabaseHelper getInstance] registerNewMessagesListener];
         [self.socket SRWebSocketOpen];
       }
       failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         NSLog(@"getInfo fail");
         NSLog(@"%@", error.localizedDescription);
       }];
    }
    

    根据url来加载网络图片

    // 使用SDWebImage第三方库加载网络图片,先设置默认头像等待网络请求
    
    // step 1 : 定义UIImageView
    UIImageView *imgV = [[UIImageView alloc]init];
    // step 2 : 获取url的string后缀
    NSString *imagePath = [SERVER_DOMAIN stringByAppendingString:self.User.ProfilePicture];
    // step 3 :拼接字符串并转换为url类型
    [imgV sd_setImageWithURL:[NSURL URLWithString:imagePath]
     // step 4 :设置默认图片,在本地的一张图片
     placeholderImage:[UIImage imageNamed:@"peppa"]
     // step 5 :加载完成后的函数,输出错误方便我们debug
     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
       NSLog(@"error== %@",error);
     }];
    

    实验效果:

    Snip20190601_5

    2. 好友聊天发送图片功能

    聊天工具离不开图片的发送,这里根据服务器api接口来实现好友之间发送图片的需求。

    这里的接口需要上传图片,用到上一周已经实现了的multipart上传。还需要添加时间戳与发送用户的id两个参数在body中。

    首先要在聊天界面添加发送图片的按钮
    self.imageButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
    self.imageButton.frame = CGRectMake(SCREEN_WIDTH - 65, SCREEN_HEIGHT - 45, 40, 40);
    [self addSubview:self.imageButton];
    
    // 添加点击事件:从图库中选择一张图片
    // 选择图片
    - (void)chooseImage:(UIButton *)btn
    {
        [self alterHeadPortrait];
    }
    
    - (void)alterHeadPortrait{
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        // 判断授权情况
        if (status == PHAuthorizationStatusRestricted ||
            status == PHAuthorizationStatusDenied) {
            // 无权限
            NSLog(@"no auth");
        }
        else{
            NSLog(@"has auth!!!!!");
        }
        
        //初始化提示框
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        //按钮:从相册选择,类型:UIAlertActionStyleDefault
        [alert addAction:[UIAlertAction actionWithTitle:@"从相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            //初始化UIImagePickerController
            UIImagePickerController *PickerImage = [[UIImagePickerController alloc]init];
            //获取方式1:通过相册(呈现全部相册),UIImagePickerControllerSourceTypePhotoLibrary
            PickerImage.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            //允许编辑,即放大裁剪
            PickerImage.allowsEditing = YES;
            //自代理
            PickerImage.delegate = self;
            //页面跳转
            [self presentViewController:PickerImage animated:YES completion:nil];
        }]];
        //按钮:取消,类型:UIAlertActionStyleCancel
        [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
        [self presentViewController:alert animated:YES completion:nil];
    }
    
    设置回调函数

    获取完图片后,下一步需要将这个图片上传到服务器,这里调用sendImage函数,实现在下面说明

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *) info{
        //定义一个newPhoto,用来存放我们选择的图片。
        UIImage *newPhoto = [info objectForKey:@"UIImagePickerControllerEditedImage"];
        //    NSLog(urlStr);
        [self dismissViewControllerAnimated:YES completion:nil];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:newPhoto];
        // 上传到云端
        [[UserManager getInstance] sendImage:@"/content/image" withImage:newPhoto withToUser:self.chatUser.UserID withDate:[NSDate date]];
    }
    
    
    上传图片给好友,与服务器交互

    四个参数

    • 后台接口api字段
    • 图片 UImage类型
    • 用户名 NSString类型
    • 时间戳 NSDate类型
    // 发送图片给好友
    -(void) sendImage:(NSString* )path withImage:(UIImage* )image
           withToUser:(NSString* )userName
             withDate:(NSDate* )timestamp
    {
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
        
        // 处理url
        NSString* urlString = [URLHelper getURLwithPath:path];
        NSLog(@"%@", urlString);
        // 添加参数
        NSDictionary* params = @{@"to":userName, @"timestamp":timestamp};
        // 发送图片
        [manager POST:urlString parameters:params constructingBodyWithBlock:
         ^(id<AFMultipartFormData> _Nonnull formData){
             // 图片转data
             NSData *data = UIImagePNGRepresentation(image);
             [formData appendPartWithFileData :data name:@"file" fileName:@"928-1.png"
                                      mimeType:@"multipart/form-data"];
         } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject){
             NSLog(responseObject[@"msg"]);
         } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error){
             NSLog(@"sendImage fail");
             NSLog(@"%@", error.localizedDescription);
         }];
    }
    

    这个与上周的头像图片上传,主要区别是多了一个body的参数,可以在post方法中添加参数即可,若仅需上传图片,则参数填为nil。

    四、实验思考及感想

    这周首先我主要是使用SDWebImage这个第三方库来完成对网络图片的显示,使用这个库可以方便的加载存储头像这类多次使用的图片,避免加载过于频繁。接着又实现了服务器的另一个接口的交互,完成好友间发送图片的需求。下一步就是如何将发送图片显示在聊天窗口中,之前是利用tableview来显示纯文字,故需要进行修改才能满足图片与文字间隔显示的需求,这个问题留待下周。

    展开全文
  • .net中 发送邮件内容嵌入图片

    千次阅读 2014-02-09 10:41:17
    在.net开发中。我们会涉及到发送邮件,而发送邮件的时候,我们在邮件中一般用到的图片都是网络图片,但是如果对方不可以直接访问外网,就不能看到图片了,例如公司的OA或ERP系统中的发送内部邮件。

    在.net开发中。我们会涉及到发送邮件,而发送邮件的时候,我们在邮件中一般用到的图片都是网络图片,但是如果对方不可以直接访问外网,就不能看到图片了,例如公司的OA或ERP系统中的发送内部邮件。

    在这样的需求下,我们需要这样解决;

    第一种解决方案:以LinkedResource的方式(不会出现在邮件附件中)

    代码如下:

    System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();      
    mailMessage.From="发送者邮箱";      
    mailMessage.To.Add("收件人邮件列表");      
    mailMessage.CC.Add("抄送人邮件列表");      
    mailMessage.Subject = subject;      
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(content,null,"text/html");      
    LinkedResource lrImage = new LinkedResource("test.gif","image/gif");      
    lrImage.ContentId = "Email_Image_Test";      
    htmlBody.LinkedResources.Add(lrImage);      
    mailMessage.AlternateViews.Add(htmlBody);      
    SmtpClient.Send(mailMessage);     

    完整案例代码:

                SmtpClient smtp = new SmtpClient();   
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;   
                smtp.Host = "smtp.163.com";   
                smtp.Credentials = new NetworkCredential("evenbing", "**");   
      
                MailMessage mm = new MailMessage();   
                mm.From = new MailAddress("test@163.com", "test");   
                mm.To.Add("test2@163.com");   
      
                mm.Subject = "带有图片的邮件";   
      
                string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";   
                mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));   
      
                HTML格式邮件的内容   
                string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";   
                htmlBodyContent += "<a href=\"http://blog.csdn.net/evenbing</a> <img src=\"cid:Email_Image_Test\">";   //注意此处嵌入的图片资源   
                AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");   
      
                  
                LinkedResource lrImage = new LinkedResource(@"d:\1.jpg", "image/gif");   
                lrImage.ContentId = "Email_Image_Test"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片   
                htmlBody.LinkedResources.Add(lrImage);   
      
                mm.AlternateViews.Add(htmlBody);   
      
                要求回执的标志   
                mm.Headers.Add("Disposition-Notification-To", "test@163.com");   
      
                自定义邮件头   
                mm.Headers.Add("X-Website", "http://blog.csdn.net/evenbing");   
      
                针对 LOTUS DOMINO SERVER,插入回执头   
                mm.Headers.Add("ReturnReceipt", "1");   
      
                mm.Priority = MailPriority.Normal; //优先级   
                mm.ReplyTo = new MailAddress("test2@163.com", "我自己");   
      
                如果发送失败,SMTP 服务器将发送 失败邮件告诉我   
                mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;   
      
                异步发送完成时的处理事件   
                smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);   
      
                开始异步发送   
                smtp.SendAsync(mm, null);   
      
      
      
      
      
    void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)   
            {   
                if (e.Cancelled)   
                {   
                    MessageBox.Show("发送被取消");   
                }   
                else  
                {   
                    if (e.Error == null)   
                    {   
                        MessageBox.Show("发送成功");   
                    }   
                    else  
                    {   
                        MessageBox.Show("发送失败: " + e.Error.Message);   
                    }   
                }   
            }   

    第二种解决方案:以邮件附件的形式(此方式图片当附件发送,并会显示在邮件内容中)

    string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";      
    htmlBodyContent += "<a href=\"testimg\"></a> <img src=\"cid:attachmentimg\">";   //注意此处嵌入的图片资源      
             
    System.Net.Mail.Attachment att = new Attachment(@"E:\test.gif");      
    att.ContentId = "attachmentimg";    



     

    展开全文
  • 自己实现异步发送请求和图片

    千次阅读 2015-07-24 17:19:22
    异步发送比同步发送请求有不阻塞主线程和支持多线程发送请求的好处。 异步发送请求可以抽象为标准的代理对象,具有使用方便,可扩充性强,只要你足够牛可以写出比第三方控件更牛的发送模块,由于是你自己写的,可以...
  • C#发送邮件嵌入图片

    千次阅读 2012-07-12 20:33:12
    我们在发送邮件时,一般图片都是用网络路径,但有时如果接收方不可直接访问外网,就不能看到图片了,比如公司内部邮件,跟外界就没法交流图片。 那么我们就来把图片嵌入邮件中;查看人就没有限制了。 1。以...
  • PC 微信发送图片 一直转圈的解决

    千次阅读 2021-01-25 19:22:36
    很简单: 重启微信,再发图片
  • 今天采用udp协议实现接收和发送图片文件,图片格式是bmp。 udp提供面向事务的简单不可靠信息传送服务,具有较好的实时性,它是一种无连接的传输层协议,工作效率比TCP高,先介绍一下udp编程的步骤。 udp客户端: ...
  • C# 发送邮件内容嵌入图片

    万次阅读 2014-12-31 16:20:33
    我们在发送邮件时,一般图片都是用网络路径,但有时如果接收方不可直接访问外网,就不能看到图片了,比如公司内部邮件,跟外界就没法交流图片。 那么我们就来把图片嵌入邮件中;查看人就没有限制了。 1。以linked...
  • 自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,...
  • 因业务原因,发送图片和录音功能的代码暂时注释,注释打开可用。 聊天室实现效果图:   全部相关代码,代码逻辑比较多但是思路清晰,可塑性较强。提供借鉴参考。 js源码 // pages/index/to_...
  • H5+MUI+Node.js+Socket.io实现即时聊天以及发送+图片压缩+图片预览保存,可以做成长按图片保存,这里是点击按钮保存的。
  • c#发送邮件内嵌图片的两种方法

    千次阅读 2013-03-08 11:42:22
    来自:... 邮件内容调用图片格式为: 发送邮件的服务端代码为: SmtpClient 发送邮件的对象 //代码省略 System.Net.Mail.MailMessage mailMessage = new S
  • content: "发送"; } footer .mui-icon-paperplane { /*-webkit-transform: rotateZ(45deg); transform: rotateZ(45deg);*/ font-size: 16px; word-break: keep-all; line-height...
  • 这里接着上一次获取纹理图片线程,继续分析发送纹理图片请求到服务器。代码如下:#001 void LLTextureFetch::sendRequestListToSimulators()#002 {#003 const S32 IMAGES_PER_REQUEST = 50;#004 const F32 LAZY_...
  • 问题由来:自己开发的一个预约系统要实现上传图片预览,自己费了九牛二虎之力,加上查资料才实现功能。下面我的实现思路。 预览功能: 1.首先需要定义一个事件,这个文件选择框发生改变,就触发这个方法,我这里叫...
  • #!/usr/bin/env python #coding: utf-8 ''' FuncName: smtplib_...Desc: 使用smtplib发送邮件 Date: 2016-04-11 14:00 Author: johnny ''' import smtplib from email.mime.multipart import MIMEMultipart from e
  • 感觉比较坑的地方就是,授权取消——拒绝授权——取消保存图片这3种状况都要考虑。奇葩的是前2种错误格式还不一样。 fail:auth denied fail auth deny 牛逼吧,一个有冒号,一个没冒号。而且,冒号前后不能有空格...
  • 主要是用到了 System.Net.Mail 命名空间,用到了此空间...●SmtpMail类,用于发送电子邮件及其附件 1、MailMessage类构造电子邮件  此类主要有以下属性和方法  ★From 发件人的地址  ★To 以分号分隔的收件人的
  • 如何实现程序调用系统邮件,发送app中抓取的xml图片和内容到指定的邮箱? 这里要感谢无聊给与的无私帮助,ok,下面详述思路过程和发放核心代码: 1.思路:你首先要了解,如何调用ios系统邮件,用到哪些协议,类,...
  • Android 超高仿微信图片选择器 图片该这么加载

    万次阅读 多人点赞 2014-10-14 09:25:45
    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731...有必要掌握图片的压缩,缓存等处理,以到达纵使你有万张照片,纵使你的像素再高,我们也能正确的显示所有的图片。当然了,单纯显示图片
  • 服务器已经搭建好了,但是发送不出去,如下图就一直卡在那里 ![图片说明](https://img-ask.csdn.net/upload/201505/08/1431087621_493620.png) 我使用的是云服务器 下面是我的main.cf配置 myhostname = 10-4-22-248 ...
  • 业务场景 当用户关闭浏览器、刷新浏览器或者跳转其他页面时,向...但是由于是xhr请求是异步发送,很可能在它即将发送的时候,页面已经卸载了,从而导致发送取消或者发送失败。异步请求响应返回后,由于页面和相关资...
  • Android发送通知

    万次阅读 2015-11-17 13:08:36
    安卓发送的通知效果就是在状态栏显示一个通知的小图标,当下拉通知栏的时候可以看到整个消息的内容,同时在接收到消息的时候可以带声音、提示灯闪烁、震动、进度条等等,单用户点击通知的内容时也可以使用Intent干...
  • IOS发送Email的方法

    千次阅读 2013-12-02 16:46:33
    IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController。借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能。   1.openURL 使用openURL调用
  • CI框架 email类发送邮件

    千次阅读 2017-07-29 02:08:42
    下表为发送邮件时所有可用的参数。 参数 默认值 选项 描述 useragent CodeIgniter None 用户代理(user agent) protocol mail mail, sendmail, or smtp 邮件发送协议 mailpath
  • 最近公司要求图片上传需要压缩,以前直接使用组件不能满足使用了,于是决定自定义个图片上传组件。可以实现动态传入url,设置压缩率,接收回传参数。 压缩也质量还不错。先上效果图效果如下压缩质量还不错,4.37M到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,584
精华内容 23,433
关键字:

如何取消正在发送的图片