Как получить верный результат в расшифровке?
Вы так и будете бегать с форума на форум, с каждой новой ошибкой в своей программе?
Вчера я вам подсказал, в чем у вас ошибка, сегодня вы не справились со следующей. Пора бы научиться самому искать ошибки в своих скриптах, а не жить на подсказках.
Так вы никогда программирование не осилите.

Я уже не говорю о том, шифруя сообщения и создавая одновременно ключ для расшифровки -  вы должны их оба передавать читателю.  Причем, ключ той-же длины, что и само сообщение. Круто! Ладно, сообщение отправили по e-mail. А ключ как будете передавать - голубиной почтой или курьером? Это фундаментальная ошибка.

А техническая -  вы так и не разобрались, где и что у вас индексируется.
Вот вам пища для размышления -  решение вашей задачи (в той постановке, какую вы задали). Попробуйте разобраться сами что и как тут работает.
def encrypt(msg):
    key = []
    new_msg = []
    alphabet = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !?.,")
    ind = 0
    while True:
        rannd = random.randint(0, 52)
        key.append(rannd)
        ab_temp = alphabet[rannd:] + alphabet[:rannd]
        new_msg.append(ab_temp[alphabet.index(msg[ind])])
        ind += 1
        if ind >= len(list(msg)):
            break
    print("Зашифрованное сообщение:")
    print(new_msg)
    print('Ключ:')
    print(key)

def decipher(msg, key):
    alphabet = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !?.,")
    ind = 0
    new_msg = []
    while True:
        ab_temp = alphabet[key[ind]:] + alphabet[:key[ind]]
        new_msg.append(alphabet[ab_temp.index(msg[ind])])
        ind += 1
        if ind >= len(list(msg)):
          break
    print("Исходное сообщение:")
    print(new_msg)

Шифруем:
encrypt('Hello world')
Зашифрованное сообщение:
['X', 'K', 'w', 'M', 'M', 'f', 'n', 'w', 'j', 'O', 'T']
Ключ:
[16, 32, 11, 27, 24, 10, 48, 8, 49, 29, 42]

Расшифровываем:
decipher(['X', 'K', 'w', 'M', 'M', 'f', 'n', 'w', 'j', 'O', 'T'], [16, 32, 11, 27, 24, 10, 48, 8, 49, 29, 42])
Исходное сообщение:
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
['Z', 'Z', 'Z', 'Z', 'Z']
Так получилось потому что в цикле шифровали alphabet.index('Z') + rannd, а не буквы исходного сообщения alphabet.index(letter) + rannd

letter = alphabet[(alphabet.index(letter) + rannd) % len(alphabet)]