Отправить письмо нескольким получателям с помощью SKPSMTPMessage? - PullRequest
5 голосов
/ 27 апреля 2011

Мне нужно отправлять электронную почту в фоновом режиме, поэтому я должен использовать библиотеку с именем: SMTP. И основной класс, который я использовал: SKPSMTPMessage. Проблема в том, что «ccEmail», когда я добавляю более двух получателей, не может отправлять электронную почту. (это занимает слишком много времени, чтобы перейти к методам делегирования). Хорошо работает с получателем <= 2. </p>

smtpEmail.ccEmail = @"xyz@gmail.com, xyz1@gmail.com, xyz2@gmail.com";   

Кто-нибудь знает это, пожалуйста, помогите мне. Большое вам спасибо!

1 Ответ

8 голосов
/ 01 июля 2011

В функции parseBuffer есть мои изменения:

case kSKPSMTPWaitingFromReply:
    {
        if ([tmpLine hasPrefix:@"250 "]) {

            if (!multipleRcptTo) {
                NSMutableString *multipleRcptToString = [NSMutableString string];
                [multipleRcptToString appendString:[self formatAddresses:toEmail]];
                [multipleRcptToString appendString:[self formatAddresses:ccEmail]];
                [multipleRcptToString appendString:[self formatAddresses:bccEmail]];

                multipleRcptTo = [[multipleRcptToString componentsSeparatedByString:@"\r\n"] mutableCopy];
                [multipleRcptTo removeLastObject];
            } 
            if ([multipleRcptTo count] > 0) {
                NSString *rcptTo = [NSString stringWithFormat:@"%@\r\n", [multipleRcptTo objectAtIndex:0]];
                [multipleRcptTo removeObjectAtIndex:0];

                //DEBUGLOG(@"C: %@", rcptTo);
                if (CFWriteStreamWriteFully((CFWriteStreamRef)outputStream, (const uint8_t *)[rcptTo UTF8String], [rcptTo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]) < 0)
                {
                    error =  [outputStream streamError];
                    encounteredError = YES;
                }
                else
                {
                    [self startShortWatchdog];
                }
            } 
            if ([multipleRcptTo count] == 0) {
                sendState = kSKPSMTPWaitingToReply;

            }
        }
        break;
    }

и добавьте это в заголовок:

NSMutableArray *multipleRcptTo;

РЕДАКТИРОВАТЬ : также измените метод ниже, так как multipleRcptTo используется как NSMutableString, который является локальным объявлением:

- (NSString *)formatAddresses:(NSString *)addresses {
  NSCharacterSet    *splitSet = [NSCharacterSet characterSetWithCharactersInString:@";,"];
  NSMutableString   *multipleRcpt = [NSMutableString string];

  if ((addresses != nil) && (![addresses isEqualToString:@""])) {
    if( [addresses rangeOfString:@";"].location != NSNotFound || [addresses rangeOfString:@","].location != NSNotFound ) {
        NSArray *addressParts = [addresses componentsSeparatedByCharactersInSet:splitSet];

        for( NSString *address in addressParts ) {
            [multipleRcpt appendString:[self formatAnAddress:address]];
        }
    }
    else {
        [multipleRcpt appendString:[self formatAnAddress:addresses]];
    }       
  }

  return(multipleRcpt);
}

SKPSMTPMessage отправляет на SMTP-адрес все сразу и должен отправлять по одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...