diff --git a/pkg/utils/errorWrapper.go b/pkg/utils/errorWrapper.go
new file mode 100644
index 0000000..08fab1b
--- /dev/null
+++ b/pkg/utils/errorWrapper.go
@@ -0,0 +1,12 @@
+package utils
+
+import (
+	"fmt"
+
+	"github.com/rs/zerolog"
+)
+
+func WrapError(mailError error, reasiningError error, logger zerolog.Logger) error {
+	logger.Error().Err(reasiningError).Msg(mailError.Error())
+	return fmt.Errorf("%w: %s", mailError, reasiningError)
+}
diff --git a/pkg/utils/errorWrapper_test.go b/pkg/utils/errorWrapper_test.go
new file mode 100644
index 0000000..46525bb
--- /dev/null
+++ b/pkg/utils/errorWrapper_test.go
@@ -0,0 +1,40 @@
+package utils
+
+import (
+	"bufio"
+	"errors"
+	"os"
+	"testing"
+
+	"github.com/rs/zerolog"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestErrorWrapper(t *testing.T) {
+	scanner, _, writer := mockLogger(t)
+	log := zerolog.New(writer)
+
+	TestError1 := errors.New("first error")
+	TestError2 := errors.New("secound error")
+
+	resulterror := WrapError(TestError1, TestError2, log)
+
+	assert.Equal(t, "first error: secound error", resulterror.Error())
+
+	scanner.Scan()
+	got := scanner.Text()
+	assert.Equal(t, "{\"level\":\"error\",\"error\":\"secound error\",\"message\":\"first error\"}", got)
+
+	assert.ErrorIs(t, resulterror, TestError1)
+	assert.NotErrorIs(t, resulterror, TestError2)
+}
+
+// https://stackoverflow.com/questions/44119951/how-to-check-a-log-output-in-go-test
+func mockLogger(t *testing.T) (*bufio.Scanner, *os.File, *os.File) {
+	reader, writer, err := os.Pipe()
+	if err != nil {
+		assert.Fail(t, "couldn't get os Pipe: %v", err)
+	}
+
+	return bufio.NewScanner(reader), reader, writer
+}