Что вам, вероятно, нужно, это:
[B || [A,B|_] <- L, A =:= "Message-ID"].
Это не предполагает никакой длины вложенных списков:
Возвращает список вторых элементов всех внутренних списков, чьипервый элемент - «Message-ID»
Если вы уверены, что существует только один «Message-ID» и хотите выдать ошибку, иначе:
[X] = [B || [A,B|_] <- L, A =:= "Message-ID"].
Если вы хотите только первыйодин (по-прежнему выдает ошибку, когда ее нет):
[X|_] = [B || [A,B|_] <- L, A =:= "Message-ID"].
Чтобы понять, что этот код делает, я рекомендую прочитать официальную документацию по Erlang о списках и главе Erlang Learn You Some aboutпо той же теме: Список понятий .