Выкл от одного байта; Нужна дополнительная CR в кодированной строке MIME Base64 для отправки вложения электронной почтыC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Выкл от одного байта; Нужна дополнительная CR в кодированной строке MIME Base64 для отправки вложения электронной почты

Сообщение Anonymous »

У меня все работает, исключая 1 байт! Заголовок PNG имеет 0x0D на 5 -м байте. Когда я использую эту функцию BASE64, она так или иначе лишивает ее. Когда я получаю вложение, я могу просматривать его в системе Linux, но поврежден в Windows. Кто -нибудь знает, почему это происходит и как я могу убедиться, что это не удаляет этот 5 -й байт? < /P>
const char base64_chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

std::string base64_encode_mime(const char* data, size_t data_len) {
std::string encoded_string;
int i = 0;
int j = 0;
unsigned char char_array_3[3];
unsigned char char_array_4[4];

// Process data in chunks of 3 bytes
while (data_len--) {
char_array_3[i++] = *(data++);
if (i == 3) {
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) > 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) > 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for (i = 0; i < 4; i++) {
encoded_string += base64_chars[char_array_4];
}
i = 0;
}
}

// Handle padding
if (i) {
for (j = i; j < 3; j++) {
char_array_3[j] = '\0';
}

char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
char_array_4[1] = ((char_array_3[0] & 0x03) > 4);
char_array_4[2] = ((char_array_3[1] & 0x0f) > 6);
char_array_4[3] = char_array_3[2] & 0x3f;

for (j = 0; j < i + 1; j++) {
encoded_string += base64_chars[char_array_4[j]];
}

while ((i++ < 3)) {
encoded_string += '=';
}
}

// Add MIME line breaks (e.g., every 76 characters)
std::string final_encoded_string;
for (size_t k = 0; k < encoded_string.length(); ++k) {
final_encoded_string += encoded_string[k];
if ((k + 1) % 76 == 0 && (k + 1) != encoded_string.length()) {
final_encoded_string += "\r\n"; // CRLF for MIME
}
}

return final_encoded_string;
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-email-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»